Oracle 存储过程:返回结果集和输出参数 [英] Oracle stored procedure: return both result set and out parameters

查看:158
本文介绍了Oracle 存储过程:返回结果集和输出参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Oracle 存储过程有 OUT 参数并返回结果集,例如

Oracle stored procedure has OUT parameter and returns result set, e.g.

create or replace procedure foo(empId IN NUMBER, maxSalary OUT NUMBER) AS BEGIN
    select * from Employee e where e.id >=empId;
    select max(salary) into maxSalary from Employee;
END;

错误:

PLS-00428: an INTO clause is expected in this SELECT statement

Mysql 存储过程可以返回结果集和输出参数.oracle db 怎么做?

Mysql stored procedure can return both result sets and out parameters. How to do it for oracle db?

推荐答案

在 Oracle 中,您不能在没有 INTO 子句的情况下直接运行 select 语句.

In Oracle, you cannot run direct select statements without an INTO clause.

如果您使用的是 Oracle 12c 及更高版本,您可以使用 REF CURSORDBMS_SQL.RETURN_RESULT

If you are using Oracle 12c and above, you may use a REF CURSOR and DBMS_SQL.RETURN_RESULT

create or replace procedure foo(empId IN NUMBER, maxSalary OUT NUMBER) AS
q SYS_REFCURSOR;
 BEGIN
    OPEN q FOR select * from Employee e where e.id >=empId;
     DBMS_SQL.return_result (q); -- This will display the result
    select max(salary) into maxSalary from Employee;
END;

对于以前的版本 (11g,10g),您可以将 REF CURSOR 作为 OUT 参数传递并从 sqlplus 或 TOAD 打印出来通过作为脚本运行.

For previous versions ( 11g,10g) , You could pass a REF CURSOR as an OUT parameter and print it from sqlplus or TOAD by running as script.

create or replace procedure foo(empId IN NUMBER, maxSalary OUT NUMBER,
   q OUT SYS_REFCURSOR) AS

     BEGIN
        OPEN q FOR select * from Employee e where e.id >=empId;
        select max(salary) into maxSalary from Employee;
    END;

在调用过程之前定义绑定变量.

Define bind variables before calling the procedure.

VARIABLE v_empID NUMBER
VARIABLE v_maxsalary NUMBER
VARIABLE v_q REFCURSOR

EXEC :v_empID := 101
EXEC foo(:v_empID,:v_maxsalary,:v_q ) 
PRINT v_q -- This will display the result from the query.

这篇关于Oracle 存储过程:返回结果集和输出参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆