CREATE OR REPLACE procedure wlb_proc is
begin
select * from bed_class_dict;
end wlb_proc;警告: 创建的过程带有编译错误各位大哥大姐这是为什么啊!!
小弟是新手.
begin
select * from bed_class_dict;
end wlb_proc;警告: 创建的过程带有编译错误各位大哥大姐这是为什么啊!!
小弟是新手.
begin
select * from bed_class_dict;
end wlb_proc;改成这样
CREATE OR REPLACE procedure wlb_proc is
str varchar2(50);
begin
select 'hello world!' into str from dual;
dbms_output.put('hello oracle!');
end wlb_proc;
begin
insert into persons values (person_seq.nextVal,pname,page);
end insertPerson;
begin
select * from bed_class_dict;
end wlb_proc; Oracle存储过程不像Mssql,里面不能直接查询
如果需要查询就用游标返回
create or replace procedure wlb_proc(cur out sys_refcursor)
as
begin
open cur for select * from bed_class_dict; end;
SQL> exec wlb_proc;
BEGIN wlb_proc; END; *
第 1 行出现错误:
ORA-06550: 第 1 行, 第 7 列:
PLS-00306: 调用 'WLB_PROC' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
v_sal NUMBER(10);
begin
select sal
into v_sal
from scott.emp
where empno = 7369;
end wlb_proc; 上面为什么要用where,因为SELECT 语句查询的结果必须为一条,如果是0条,就会出现NO_DATA_FOUND的错误,如果是两条或以上,就会出现TOO_MANY_ROWS的错误。如果要处理多条数据,可以用游标(CURSOR).
如sql server中的存储过程:
create proc wlb_proc(@flag varchar(20))as
begin
-----------------------
--这里可以是任何处理语句
insert into ....
update ....
--------------------------最后是一条返回多条数据的 select 语句
select * from bed_class_dict
return
end
exec wlb_proc
可以查询出 表 bed_class_dict 中的多条数据
--Oracle不能那样的
存储过程主要是业务处理逻辑,Insert、update、delete等等
查询没有什么意义
as
begin
open cur for select * from bed_class_dict; end; 那这个用游标的存储过程怎么返回数据。我是想问为什么这里用execute wlb_proc会报错?
怎么使用这个存储过程
create or replace procedure wlb_proc
as
cursor cur1
is
select * from dept;
rec dept%rowtype;
begin
for rec in cur1
loop
dbms_output.put_line(rec.deptno||' '||rec.dname||' '||rec.loc);
end loop;
end;
/SQL> @tt.sqlProcedure created.SQL> set serveroutput on
SQL> exec wlb_proc
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTONPL/SQL procedure successfully completed.
前面写的那个有点麻烦 还得指定每条记录的字段
SQL> create or replace procedure pro_test(result out sys_refcursor)
2 is
3 begin
4 open result for select * from dept;
5 end;
6 /Procedure created.SQL> variable b refcursor
SQL> exec pro_test(:b);PL/SQL procedure successfully completed.SQL> print :b; DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTONSQL>