[oracle]pl/sql in/out变量的使用和过程中过程的调用

--in/out 类型变量的使用 以及过程中调用过程,获取out类型的返回值

--建一张表books

--简单过程一 插入一条记录 
[sql]  view plain  copy
  1. create table books(bookid number,bookname varchar(50),pubhouse varchar(50));   
  2.    
  3. --简单过程一 插入一条记录   
  4. create or replace procedure sub_pro1   
  5. (bookid in number,bookname in varchar2,pubhouse in varchar2) is   
  6. begin   
  7.   insert into books values(bookid,bookname,pubhouse);   
  8. end  

测试:
  
[sql]  view plain  copy
  1. SQL> exec sub_pro1(1,'wudi','安徽文艺出版社');   
  2.     
  3. PL/SQL procedure successfully completed   


--简单过程二 由id获取一条记录的的name

[sql]  view plain  copy
  1. create or replace procedure sub_pro2   
  2. (bookid in number,bookname out varchar2) is   
  3. begin   
  4.    select bookname into bookname from books where bookid=bookid;   
  5. end;   
  6.    
  7. --调用过程,并打印出结果   
  8. create or replace procedure sub_pro22   
  9. (bookno in number) is   
  10. --接受out变量的内容   
  11. v_bookname varchar(50);   
  12. begin    
  13.   --直接调用过程   
  14.   sub_pro2(bookno,v_bookname);   
  15.   --如果成功调用,那么变量应该是有值的   
  16.   dbms_output.put_line(bookno||' 的图书为'||v_bookname);   
  17. end;   

测试:
 
[sql]  view plain  copy
  1. SQL> exec sub_pro22(1);   
  2.     
  3. 1 的图书为wudi   
 
--简单过程三 得到一个用户集合的结果集,取出同一个出版社的书的id和name
 
 
[sql]  view plain  copy
  1. books表中插入这么几条数据   
  2.     BOOKID BOOKNAME                                           PUBHOUSE   
  3. ---------- -------------------------------------------------- --------------------------------------------------   
  4.          1 wudi                                               安徽文艺出版社   
  5.          2 haorn                                              10   
  6.          3 angle                                              20   
  7.          4 anglele                                            10   

[sql]  view plain  copy
  1. --1 创建一个包,定义一个cursor为test_cursor   
  2. create or replace package testpackage as    
  3. type test_cursor is ref cursor;   
  4. end testpackage;   
  5. --2 创建过程   
  6. create or replace procedure sub_pro3   
  7. (l_pubhouse in varchar2,l_cursor out testpackage.test_cursor) is   
  8. begin   
  9.   open l_cursor for select bookid,bookname from books where pubhouse=l_pubhouse;   
  10. end;   
  11. --3 调用过程 打印与游标   
  12. create or replace procedure sub_pro33(l_pubhouse in varchar2) is   
  13. books_cursor testpackage.test_cursor;   
  14. v_bookid books.bookid%type;   
  15. v_bookname books.bookname%type;   
  16. begin   
  17.   sub_pro3(l_pubhouse,books_cursor);   
  18.   loop    
  19.     fetch books_cursor into v_bookid,v_bookname;   
  20.     --not found要连在一起写   
  21.     exit when books_cursor%notfound;   
  22.     dbms_output.put_line('图书ID是:'||v_bookid||'  名称是:'||v_bookname);   
  23.   end loop;   
  24. end;   

看起来还能用:

  1. SQL> exec sub_pro33('10');   
  2.     
  3. 图书ID是:2  名称是:haorn   
  4. 图书ID是:4  名称是:anglele   
  5.     
  6. PL/SQL procedure successfully completed   


注意!1 过程中的调用只要直接写过程名就好了,不要什么调用关键字。

2 对于out类型的值直接声明一个相同类型的变量来接收就好了。

3 为了好测试才用另一个过程来显示结果的,以后会通过jdbc来调用过程,获取函数。

 

本文出自 orangleliu笔记本 博客,请务必保留此出处http://blog.csdn.net/orangleliu/article/details/38309425

版权声明:本文为orangleliu (http://blog.csdn.net/orangleliu/)原创文章,自由传播,文章转载请声明, 多谢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值