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

来源:互联网 发布:送外卖的软件 编辑:程序博客网 时间:2024/06/05 03:41
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  / 800PL/SQL procedure successfully completed2.通过empno查询多个值create or replace procedure selectEmp(emp_no in number, ename out varchar2,job out varchar2 ,sal out number) isbegin  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  / SMITHCLERK8003.通过empno查询一个对象的所有属性create or replace procedure selectemp1(emp_no in number, emp_row out emp%rowtype) isbegin  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  / 73697499752175667654769877827788783978447876790079027934121390233 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 isfunction 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  / 73697499752175667654769877827788783978447876790079027934121390233 PL/SQL procedure successfully completed

原创粉丝点击