PL/SQL中存储过程int和out的用法
2012-03-22 13:32
435 查看
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
相关文章推荐
- PL/SQL中存储过程int和out的用法
- oracle pl/sql之java中调用oracle有参存储过程
- Oracle PL/SQL 存储过程、存储函数、触发器
- PL/SQL --> 存储过程
- pl/sql中TABLE()函數的用法(轉)
- PL/SQL3—— 存储过程
- PL-SQL 编程(二)游标、存储过程、函数
- pl/sql中的length,substr和lengthb,substrb用法解析
- Oracle PL/SQL之IN OUT NOCOPY
- ORACLE PL/SQL语法应用:游标,存储过程,触发器,函数
- PL/SQL中引号特殊用法
- pl/sql 创建存储过程
- PL/SQL&存储过程||存储函数&触发器
- oracle 中PL/SQL中type的简单用法
- PL/SQL之JOB用法 (定时跑数据)
- PL/SQL 基础---一些高阶用法
- oracle PL/SQL 中变量绑定用法
- PL/SQL中锁的用法
- 在Oracle中不通过存储过程一次执行多条SQL语句Oracle PL/SQL
- PL/SQL --> 存储过程