Oracle 使用OUT参数创建/调用存储过程

来源:互联网 发布:淘宝刷票会被发现吗 编辑:程序博客网 时间:2024/05/15 06:19

 1.OUT类型的参数由存储过程传入值,然后由用户接受参数值。下面通过SCOTT.EMP表创建一个搜索过程,该过程将根据所提供的EMPNO列的值检索雇员的ENAME和SAL

SQL> create or replace procedure search_employee(  2  empno_param in number,  3  name_param out emp.ename%type,  4  salary_param out emp.ename%type) is  5  begin  6    select ename,sal  7    into name_param,salary_param  8    from scott.emp  9    where empno=empno_param; 10  exception 11    when no_data_found then 12    name_param:='NULL'; 13    salary_param:=-1; 14    dbms_output.put_line('未找到指定编号的员工信息!'); 15  end search_employee; 16  /过程已创建。

#使用VARIABLE命令绑定参数值,并调用存储过程SEARCH_EMPLOYEE

SQL> variable name varchar2(10);SQL> variable sal number;SQL> exec search_employee(7499,:name,:sal);PL/SQL 过程已成功完成。

# 使用print命令显示变量值

SQL> print nameNAME--------------------------------ALLENSQL> print sal       SAL----------      1600

# 使用SELECT语句检索绑定的变量值

SQL> select :name,:sal  2  from dual;:NAME                                  :SAL-------------------------------- ----------ALLEN                                  1600

# 在匿名程序块中调用存储过程SEARCH_EMPLOYEE

SQL> set serverout onSQL> declare  2  name emp.ename%type;  3  sal emp.sal%type;  4  begin  5    search_employee(7499,name,sal);  6     dbms_output.put('姓名:' || name);  7     dbms_output.put_line('薪金:' || sal);  8   end;  9   /姓名:ALLEN薪金:1600PL/SQL 过程已成功完成。

# 调用具有OUT参数过程中,未对OUT参数提供变量

SQL> set serverout onSQL> declare  2  name emp.ename%type;  3  begin  4    search_employee(7499,name,1200);  5  end;  6  /  search_employee(7499,name,1200);                            *第 4 行出现错误:ORA-06550: 第 4 行, 第 29 列:PLS-00363: 表达式 '1200' 不能用作赋值目标ORA-06550: 第 4 行, 第 3 列:PL/SQL: Statement ignored


0 0