PL/SQL中存储过程int和out的用法

原创 2012年03月22日 13:32:06
PL/SQL中存储过程int和out的用法
一   介绍
过程和函数中的in和out
(1)一般来讲,过程和函数的区别在于函数可以有一个返回值;而过程没有返回值。
(2)但过程和函数都可以通过out指定一个或多个输出参数。我们可以利用out参数,在过程和函数中实现返回多个值。
二  int和out的使用举例
1.Int输入和out输入和输出一个值
create or replace procedure updateSal(emp_no in number,empsal out number)
    as
    emp_sal emp.sal%type;
    begin

        select sal into emp_sal from emp where empno=emp_no;

        update emp set sal = emp_sal*1.1 where empno=emp_no;
        empsal:=emp_sal;--赋值自动输出
   end;

SQL> set serveroutput on;
SQL> declare
  2  num number;
  3  begin
  4  updateSal(7369,num);
  5  dbms_output.put_line(num);
  6  end;
  7  /
 
800
PL/SQL procedure successfully completed



2.通过empno查询多个值
create or replace procedure selectEmp(emp_no in number, ename out varchar2,job out varchar2 ,sal out number) is
begin
  select ename,job,sal into ename,job,sal from emp where empno=emp_no;
end selectEmp;

测试:
SQL> declare
  2  ename varchar2(40);
  3  job varchar2(40);
  4  sal number;
  5  begin
  6  selectEmp(7369,ename,job,sal);
  7  dbms_output.put_line(ename||job||sal);
  8  end;
  9  /
 
SMITHCLERK800


3.通过empno查询一个对象的所有属性
create or replace procedure selectemp1(emp_no in number, emp_row out emp%rowtype) is
begin
  select *  into emp_row from emp where empno=emp_no;
end selectemp1;

测试:
SQL> set serveroutput on;
SQL> declare
  2  emp_row emp%rowtype;
  3  begin
  4  selectemp1(7369,emp_row);
  5  dbms_output.put_line(emp_row.ename);
  6  end;
  7  /
SMITH

  4.通过使用光标来获取所有的emp下的


首先用存储过程来调用所有的员工
因为获取的是一个集合,所以要把集合放到一个光标里,放到光标里要建一个包,首先要声明包结构,然后创建包体。
(1)	声明包结构


create or replace package empPackage is
  -- 声明需要的类型
  type empcursor is ref cursor;
  --存储过程的声明  参数中使用了type变量声明的类型
  procedure selectEmps(emplist out empcursor);
end empPackage;
--执行之后自动创建包体
(2)创建包体
create or replace package body empPackage is
--包中声明 存储过程的实现  方法的变量必须一致
  procedure selectEmps(emplist out empcursor)  is
  --s声明返回的变量
  begin
    --为光标赋值 
   open emplist for select * from emp;
  end;
  --结束包体
end empPackage;


--注:包体的名称和包的名称一致 emppackage


(2)	测试


SQL> declare
  2  empcl empPackage.empcursor;
  3  emp_row emp%rowtype;
  4  begin
  5       empPackage.selectEmps(empcl);
  6     loop
  7        fetch empcl into emp_row;
  8        exit when empcl%notfound;
  9        dbms_output.put_line(emp_row.empno);
 10      end loop;
 11      close empcl;
 12    end;
 13  /
 
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934
12
13
90
233
 
PL/SQL procedure successfully completed


用存储函数的方法来调用所有的员工
(1)	声明包结构
create or replace package functionEmps is
  --声明类型
  type empcl is ref cursor;
  function queryEmps return empcl;
end functionEmps;


(2)	创建包体
create or replace package body functionEmps is
function queryEmps return empcl is
  emp_cl empcl;
  begin
    open emp_cl for select * from emp;
    return emp_cl;
  end;
end functionEmps;


(3)测试
SQL> declare
  2    emp_cl functionEmps.empcl;
  3    emp_row  emp%rowtype;
  4    begin
  5      emp_cl:=functionEmps.queryEmps;
  6      loop
  7        fetch emp_cl into emp_row;
  8        exit when emp_cl%notfound;
  9        dbms_output.put_line(emp_row.empno);
 10      end loop;
 11      close emp_cl;
 12    end;
 13  /
 
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934
12
13
90
233
 
PL/SQL procedure successfully completed


相关文章推荐

存储过程+调用存储过程+无/带参的存储过程+in参数+out参数+int out参数+为参数设置默认值

存储过程 1存储过程是一组为了完成特定功能的SQL语句集 2存储过程编译后存储在数据库中 3执行存储过程比执行存储过程封装的SQl语句集更有效率 4不能指定declare关键字 5: OUT...

Oracle基础知识(二十二) - 存储过程in out inout三种参数模式

参考博客:http://blog.csdn.net/lushuaiyin/article/details/9289275 写的很好,学习一下...

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

--in/out 类型变量的使用 以及过程中调用过程,获取out类型的返回值 --建一张表books --简单过程一 插入一条记录  create table books(bookid number,...

oracle 存储过程in out inout三种参数模式和PROMPT用法

oracle 存储过程in out inout三种参数模式  oracle过程中定义了in|out|in out3中参数模式,每个参数可以选择其一  in 是参数的默认模式,这种模...

plsql 导出数据到 excel

说明:xls:能保存65535条数据,多出的就要用xlsx格式的excel 方法一:(适用于导出少量数据)(plsql版本可以导出xlsx,有的只能xls) 1.首先在SQL Window窗口...

关于在PL/SQL代码中提交请求

在代码中提交请求有两种情况:1、 在PL/SQL程序中提交请求在PL/SQL中调用fnd_request.submit_request,/* Submit a request where no set...
  • thenile
  • thenile
  • 2009年12月05日 12:14
  • 2690

PL/SQL存储过程笔记

  • 2009年07月16日 10:44
  • 111KB
  • 下载

PL/SQL Developer中如何调试oracle的存储过程(转)

PL/SQL Developer中如何调试oracle的存储过程(转) 上一篇 / 下一篇  2011-12-02 13:11:33 / 个人分类:Oracle 查看( 36 ) / ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PL/SQL中存储过程int和out的用法
举报原因:
原因补充:

(最多只允许输入30个字)