创建游标.存储过程及包
/*********************************游标********************************/
/*单向游标:
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;
公告
本文转自
我的程序人生博客园博客,原文链接:
http://www.cnblogs.com/wenjl520/archive/2009/04/28/1445769.html,如需转载请自行联系原作者
【推荐】腾讯云新用户域名抢购1元起,抓紧抢购
· 精准率首次超过人类!阿里巴巴机器阅读理解打破世界纪录
· 技术帖:每天被今日头条推送文章 背后的算法技术是什么?
· 支付宝实体版老黄历问世:全球限量1000册
· 趣店被蚂蚁金服送上纽交所,现在是时候该独立了
· 蚂蚁宝卡升级:支付宝/微博即将免流
» 更多新闻...
· 以操作系统的角度述说线程与进程
· 软件测试转型之路
· 门内门外看招聘
· 大道至简,职场上做人做事做管理