您的位置:首页 > 数据库 > Oracle

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

2017-05-02 17:55 197 查看
 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,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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: