您的位置:首页 > 数据库 > Oracle

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

2014-07-31 00:29 411 查看
--in/out 类型变量的使用 以及过程中调用过程,获取out类型的返回值

--建一张表books

--简单过程一 插入一条记录 
create table books(bookid number,bookname varchar(50),pubhouse varchar(50));

--简单过程一 插入一条记录
create or replace procedure sub_pro1
(bookid in number,bookname in varchar2,pubhouse in varchar2) is
begin
insert into books values(bookid,bookname,pubhouse);
end


测试:
  
SQL> exec sub_pro1(1,'wudi','安徽文艺出版社');

PL/SQL procedure successfully completed


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

create or replace procedure sub_pro2
(bookid in number,bookname out varchar2) is
begin
select bookname into bookname from books where bookid=bookid;
end;

--调用过程,并打印出结果
create or replace procedure sub_pro22
(bookno in number) is
--接受out变量的内容
v_bookname varchar(50);
begin
--直接调用过程
sub_pro2(bookno,v_bookname);
--如果成功调用,那么变量应该是有值的
dbms_output.put_line(bookno||' 的图书为'||v_bookname);
end;


测试:
 
SQL> exec sub_pro22(1);

1 的图书为wudi
 
--简单过程三 得到一个用户集合的结果集,取出同一个出版社的书的id和name
 
 
books表中插入这么几条数据
BOOKID BOOKNAME                                           PUBHOUSE
---------- -------------------------------------------------- --------------------------------------------------
1 wudi                                               安徽文艺出版社
2 haorn                                              10
3 angle                                              20
4 anglele                                            10


--1 创建一个包,定义一个cursor为test_cursor
create or replace package testpackage as
type test_cursor is ref cursor;
end testpackage;
--2 创建过程
create or replace procedure sub_pro3
(l_pubhouse in varchar2,l_cursor out testpackage.test_cursor) is
begin
open l_cursor for select bookid,bookname from books where pubhouse=l_pubhouse;
end;
--3 调用过程 打印与游标
create or replace procedure sub_pro33(l_pubhouse in varchar2) is
books_cursor testpackage.test_cursor;
v_bookid books.bookid%type;
v_bookname books.bookname%type;
begin
sub_pro3(l_pubhouse,books_cursor);
loop
fetch books_cursor into v_bookid,v_bookname;
--not found要连在一起写
exit when books_cursor%notfound;
dbms_output.put_line('图书ID是:'||v_bookid||'  名称是:'||v_bookname);
end loop;
end;


看起来还能用:

SQL> exec sub_pro33('10');

图书ID是:2 名称是:haorn
图书ID是:4 名称是:anglele

PL/SQL procedure successfully completed

注意!1 过程中的调用只要直接写过程名就好了,不要什么调用关键字。
2 对于out类型的值直接声明一个相同类型的变量来接收就好了。
3 为了好测试才用另一个过程来显示结果的,以后会通过jdbc来调用过程,获取函数。

 

本文出自 “orangleliu笔记本” 博客,请务必保留此出处http://blog.csdn.net/orangleliu/article/details/38309425
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle plsql in out