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

--建一张表books
--简单过程一 插入一条记录 
 
  
  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
 
测试:
  
 
  
  1. SQL> exec sub_pro1(1,'wudi','安徽文艺出版社'); 
  2.   
  3. PL/SQL procedure successfully completed 
 
 
--简单过程二 由id获取一条记录的的name
 
 
  
  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
 测试:
 
 
  
  1. SQL> exec sub_pro22(1); 
  2.   
  3. 1 的图书为wudi 
 
 
 
--简单过程三 得到一个用户集合的结果集,取出同一个出版社的书的id和name
 
 
 
  
  1. books表中插入这么几条数据 
  2.     BOOKID BOOKNAME                                           PUBHOUSE 
  3. ---------- -------------------------------------------------- -------------------------------------------------- 
  4.          1 wudi                                               安徽文艺出版社 
  5.          2 haorn                                              10 
  6.          3 angle                                              20 
  7.          4 anglele                                            10 
 
 
  
  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来调用过程,获取函数。