pl/sql编程--(在sql中)带有输入输出参数,游标的过程调用实例

带有输入输出的存储过程
首先来创建一个表,执行脚本如下脚本:

    --删除表
    drop table book;
   --创建表book
    create table book (bid number,bname varchar2(50),bhouse varchar2(50));
    --插入数据
    insert into book(bid,bname,bhouse) values(1,'笑傲江湖','人民出版社');
    insert into book(bid,bname,bhouse) values(2,'钢铁是怎样炼成的','人民出版社');
    insert into book(bid,bname,bhouse) values(3,'平凡的世界','人民出版社');
    commit;

带有输入输出的过程:

--输入id,返回书名,和出版社名字
create or replace procedure anl1
--使用out表示一个输出参数
(spno in number,spname out book.bname%type,sphouse out book.bhouse%type) is
begin
select bname,bhouse into spname,sphouse from book where bid = spno;
end;
--in 代表输入参数,如果不写,默认为in
--out,表示这是一个输出参数

--调用带有输入输出的过程
    declare
    a book.bname%type;
    b book.bhouse%type;
begin
    anl1(1,a,b);
    dbms_output.put_line('书名:'||a||'出版社:'||b);
end;

带有游标的过程,既返回的是一个列表【结果集】:
–输入出版社的名字,返回该出版社书籍的所有信息
分析:由于oracle过程没有返回值,他所有的返回值都是通过out参数来代替,但是由于该案例需要输出的信息是一个集合,所以不能用一般的参数,需要使用包(package)

--1、建立一个包,定义一个游标
create or replace package sp_package as
type sp_cursor is ref cursor;
end sp_package;

--2、创建过程,输出类型是一个游标
create or replace procedure anl1 
--定义游标类输出类型:参数名 out 创建的包名.包内的游标名;
(sphouse in book.bhouse%type,sp_test out sp_package.sp_cursor) is
begin
  open sp_test for select * from book where bhouse = sphouse;
end;

--最后调用过程(在SQL中)
declare
	--定义过程输入参数变量
    a book.bhouse%type:= '人民出版社';
    --定义游标变量(包内的需要加上包名)
    b sp_package.sp_cursor;
    --定义输出变量
    c book.bid%type;
    d book.bname%type;
    e book.bhouse%type;
begin
	--调用过程
     anl1(a,b);
       loop
       --赋值,将游标变量获取到的内容一一赋值给输出变量c,d,e
          fetch b into c,d,e;
          --判断aa是否为空
          exit when b%notfound;
          dbms_output.put_line('id:'||c||'name:'||d||'house:'||e);
       end loop;
end;
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值