admin 管理员组文章数量: 887021
2023年12月23日发(作者:webrtc技术详解pdf)
create or replace package pack_one as --包头的声明
type cur is ref cursor; --定义一个动态游标,也只能是动态
type v_record is record( -- 定义一个记录类型(集合的一种)
v_name %type,
v_sal %type,
v_dname %type
);
function my_fun(v_job varchar2) return cur; --定义一个方法
procedure my_pro(v_job in varchar2,my_cur2 out cur);--定义一个存储过种
end pack_one;--包头结束
create or replace package body pack_one as--创建一个包体
function my_fun(v_job varchar2) return cur--对方法的实现,注意是在包体的声明部分里操作
is
my_cur cur;--声明游标,因为还是在包的部分,所以直接声明即可
sql_cur varchar2(200);
begin
sql_cur:='select ,, from emp t1,dept t2 where
= and ='''||v_job||'''';--拼接SQL语句,重要注意引号的使用
dbms__line(sql_cur);--可以通过输出为调试拼接好的SQL语句
open my_cur for sql_cur;--打开游标
return(my_cur);--方法有返回值,要牢记
end my_fun;--方法的实现结束
procedure my_pro(v_job in varchar2,my_cur2 out cur)--对存储过程的实现
as
sql_cur varchar2(200);
begin
sql_cur:='select ,, from emp t1,dept t2 where
= and ='''||v_job||'''';
open my_cur2 for sql_cur;--打开游标,注意,打开的是传进来的参数,即我们把游标通过参数传出给调用环境 因为是out
end my_pro;
begin
null;
end pack_one;--存储实现的结束
declare--下面是对包的调用 调用其中的方法
v_cur pack_;--注意这里游标类型声明的方式
my_record pack_one.v_record;--同上,注意声明方式
begin
v_cur:=pack__fun('CLERK');--通过参数调过方法,传进的参数,会被接收 因为是
in
loop
fetch v_cur into my_record;
exit when v_cur%notfound;
dbms__line(my_record.v_name||'--'||my_record.v_sal||'--'||my_record.v_dname);
end loop;
end;
declare --下面是对包的调用,调用其中的合存储过程
temp_record pack_one.v_record;--同上,注意声明方式
my_cur2 pack_;--注意这里游标类型声明的方式
begin
pack__pro('CLERK',my_cur2);--通过传参,来调用,第一个参数是传进,第二个是用于接收传出的参数
loop
fetch my_cur2 into temp_record;
exit when my_cur2%notfound;
dbms__line(temp_record.v_name||'--'||temp_record.v_sal||'--'||temp_record.v_dname);
end loop;
end;
版权声明:本文标题:ORACLE 包和包体的创建和使用 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1703286575h445578.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论