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 name NAME -------------------------------- ALLEN sql> print sal SAL ---------- 1600
#使用SELECT语句检索绑定的变量值
sql> select :name,:sal 2 from dual; :NAME :SAL -------------------------------- ---------- ALLEN 1600
#在匿名程序块中调用存储过程SEARCH_EMPLOYEE
sql> set serverout on sql> 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薪金:1600 PL/sql 过程已成功完成。
# 调用具有OUT参数过程中,未对OUT参数提供变量
sql> set serverout on sql> declare 2 name emp.ename%type; 3 begin 4 search_employee(7499,1200); 5 end; 6 / search_employee(7499,1200); * 第 4 行出现错误: ORA-06550: 第 4 行,第 29 列: PLS-00363: 表达式 '1200' 不能用作赋值目标 ORA-06550: 第 4 行,第 3 列: PL/sql: Statement ignored