创建游标.存储过程及包
创建游标.存储过程及包
/*********************************游标********************************/
/*单向游标:
declare cursor 游标名 is select 语句
带参游标:
declare cursor 游标名 (参数1 类型,.....)is select 语句(可以带参数)
游标属性:
%found ---是否找到
%isopen ---是否打开
%notfound ---找不到游标
%rowcount ---判断游标是否有结果
游标循环:
FOR 变量 IN 游标名 LOOP
语句
END LOOP
/************例子**************/
declare
cursor cur_emp is select * from emp;
e emp%rowtype;
begin
open cur_emp;
fetch cur_emp into e;
while cur_emp%found
loop
dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);
fetch cur_emp into e;
end loop;
close cur_emp;
end;
PL/SQL 过程已成功完成。
/*******不需定义和关闭游标****************/
SQL> begin
2 for e in(select * from emp)
3 loop
4 dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);
5 end loop;
6 end;
7 /
PL/SQL 过程已成功完成。
/*************************************存储过程******************************/
/*过程(procedure)
create or replace procedure
(参数1 in/out/in out 类型,
参数2 in/out/in out 类型,
..........)
is/as
pl/sql语句块
/************例子**************/
1 create or replace procedure proc_emp
2 ( j in varchar2,
3 c out integer)
4 as
5 counter integer:=0;
6 begin
7 for e in (select *from emp where job=j)
8 loop
9 dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);
10 counter:=(counter+1);
11 end loop;
12 c:=counter;
13* end;
14 /
2 ( j in varchar2,
3 c out integer)
4 as
5 counter integer:=0;
6 begin
7 for e in (select *from emp where job=j)
8 loop
9 dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);
10 counter:=(counter+1);
11 end loop;
12 c:=counter;
13* end;
14 /
过程已创建。
/********调用************/
exec 过程([参数])
/**********************************函数***************************/
/*函数(FOUCTION)
create or replace function 名
return 类型 is/as
pl/sql语句块
/***********例子************/
1 create or replace function fun_emp
2 ( j in varchar2)
3 return integer
4 as
5 counter integer:=0;
6 begin
7 for e in (select *from emp where job=j)
8 loop
9 dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);
10 counter:=(counter+1);
11 end loop;
12 return counter;
13* end;
SQL> /
2 ( j in varchar2)
3 return integer
4 as
5 counter integer:=0;
6 begin
7 for e in (select *from emp where job=j)
8 loop
9 dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);
10 counter:=(counter+1);
11 end loop;
12 return counter;
13* end;
SQL> /
函数已创建。
执行:exec 函数([参数])
/************************************创建包**********************/
/*包头:
create or replace package 名
is/as
定义部分
end
包体:
create or replace package body 名
is/as
代码部分
end
/*********例子*********************/
--..........建包头................
create or replace package pag_wlxt as
procedure proc_ruku(code varchar2); -- 入库单号
end;
create or replace package pag_wlxt as
procedure proc_ruku(code varchar2); -- 入库单号
end;
--.........建包体.................
create or replace package body pag_wlxt as
procedure proc_ruku(code varchar2) is
num integer :=0;
counter integer :=0;
shbz wltrkgl0.rkshbz%type;
rkcb wltrkgl0%rowtype;
kcb wltkcgl0%rowtype;
procedure proc_ruku(code varchar2) is
num integer :=0;
counter integer :=0;
shbz wltrkgl0.rkshbz%type;
rkcb wltrkgl0%rowtype;
kcb wltkcgl0%rowtype;