【问题标题】:How can I return dataset in procedure?如何在程序中返回数据集?
【发布时间】:2017-09-13 20:44:50
【问题描述】:

我有这样的程序:

CREATE OR REPLACE PROCEDURE RIC.TEST 
(P_VAR1 IN VARCHAR2, P_VAR2 IN VARCHAR2, P_VAR3 IN VARCHAR2, P_VAR4 IN VARCHAR2)
IS 
L_RC SYS_REFCURSOR;
BEGIN
INSERT INTO RIC.TEMP_TABLE
    SELECT * FROM RIC.TABLE WHERE COL1=P_VAR1 AND COL2=P_VAR2 AND COL3=P_VAR3 AND COL4=P_VAR4 AND ...;

OPEN L_RC
FOR 'SELECT .... FROM RIC.TEMP_TABLE WHERE ...';
...

TEMP_TABLE 是一个临时表。运行此过程时,我需要返回并显示第二个选择输出(SELECT .... FROM RIC.TEMP_TABLE WHERE ...)。我怎样才能做到这一点?光标的方式不对吗?

谢谢。

【问题讨论】:

  • 您使用的是哪个 Oracle 版本?
  • 11.2.0.4.0 - 2 节点 rac。

标签: oracle stored-procedures plsql oracle11gr2 sys-refcursor


【解决方案1】:

修改过程为

CREATE OR REPLACE PROCEDURE ric.test (p_var1     IN     VARCHAR2,
                                      p_var2     IN     VARCHAR2,
                                      p_var3     IN     VARCHAR2,
                                      p_var4     IN     VARCHAR2,
                                      p_cursor      OUT SYS_REFCURSOR)
IS
BEGIN
   INSERT INTO ric.temp_table
      SELECT *
        FROM ric.table
       WHERE col1 = p_var1 AND col2 = p_var2 AND col3 = p_var3;

   OPEN p_cursor FOR SELECT * FROM ric.temp_table;
END;
/

并执行该过程

VARIABLE cur REFCURSOR;
EXEC test (:cur);
PRINT cur;

如果您想使用 SQL 执行该过程,请将过程包装在一个函数中,然后在 SQL 语句中调用该函数。 Example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 2011-02-17
    相关资源
    最近更新 更多