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;


本文标签: 注意 声明 游标 参数 调用