Sql 如何在oracle存储过程中使用WITH子句和ref游标?

Sql 如何在oracle存储过程中使用WITH子句和ref游标?,sql,oracle,Sql,Oracle,如何在存储过程中使用 CREATE OR REPLACE PROCEDURE TEST_CSV( CUR_USERS OUT SYS_REFCURSOR, CUR_JOBS OUT SYS_REFCURSOR ) AS BEGIN WITH resultset2 AS (SELECT U.USERID, U.PASSWORD FROM USERS U WHERE TRUNC(DATECREATED

如何在存储过程中使用

    CREATE OR REPLACE PROCEDURE TEST_CSV(
        CUR_USERS OUT SYS_REFCURSOR,
CUR_JOBS OUT SYS_REFCURSOR )
    AS
    BEGIN
    WITH resultset2 AS
      (SELECT U.USERID,
        U.PASSWORD
      FROM USERS U
      WHERE TRUNC(DATECREATED)=TRUNC(SYSDATE-1)
      )
    SELECT RESULTSET2.* FROM resultset2;
    OPEN CUR_USERS FOR SELECT * FROM QUOTE WHERE LOWER(CREATEDBY)= resultset2.USERID;
OPEN CUR_JOBS FOR SELECT * FROM JOBS WHERE LOWER(CREATEDBY)= resultset2.USERID;
    END;
用上面的代码我得到下面的错误-

•   Error(6,1): PLS-00428: an INTO clause is expected in this SELECT statement 
•   Error(13,22): PL/SQL: SQL Statement ignored 
•   Error(13,72): PL/SQL: ORA-00904: "RESULTSET2"."USERID": invalid identifier 
我们是否可以将结果存储在临时表中,并在使用后删除该表?如果是的话,我们如何才能做到这一点?如果没有,那么其他解决方案是什么?我正在使用Oracle11g

示例代码将非常感谢。。。
保持编码:)

似乎不支持PL/SQL存储过程、函数或包上的WITH子句,但您可以在带有execute immediate的动态SQL语句中使用它,如图所示。

问题不是WITH的
问题。您尚未指定结果存储的位置。@GordonLinoff我们可以将结果存储在临时表中,并在使用后删除该表吗?如果是的话,我们如何才能做到这一点?如果没有,那么其他解决方案是什么?我正在使用oracle 11g。您不需要临时表。把它存储在一个变量里。你不是把事情复杂化了吗?基本上,在两个表之间有一个联接查询,或者在第二个表上有一个子查询。或者您只是想看看是否可以在PL/SQL存储过程中使用WITH?