创建游标.存储过程及包
/*********************************游标********************************/
/*单向游标:
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 /
过程已创建。
/********调用************/
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> /
函数已创建。
执行: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 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;