使用" out"调用Oracle存储过程。存储过程中的ref_cursor

时间:2014-03-25 20:25:42

标签: sql oracle stored-procedures

我试图基本上在存储过程中调用一组Oracle存储过程。只要我的proc没有返回记录集并且在"中使用"参数,我很好;但是,其中一个存储过程有一个" out" sys_refcursor的参数。调用内部过程也可以正常工作,但是一旦我用一些合作逻辑将它们包起来,我就会遇到问题。

具体来说,我收到以下错误:

Error starting at line 2 in command: 
EXECUTE CRU_MY_PROCESS_EXPORT (1,'EAST',P_RECORDSET => :RC) 
Error report: 
Cursor is closed. RC

以下是存储过程:

1 create or replace PROCEDURE CRU_MY_PROCESS_EXPORT ( 
2   P_ID_NR IN NUMBER,
3   P_ENVIRONMENT IN VARCHAR,
4   P_RECORDSET OUT SYS_REFCURSOR ) AS
5
6    V_DB_SOURCE_ID NUMBER :=1;
7    V_REC SYS_REFCURSOR;
8
9   BEGIN
10     IF P_ENVIRONMENT = 'WEST' THEN
11      R_MY_PROCESS_SYNC_WEST(V_DB_SOURCE_ID, P_ID_NR);
12    END IF;  
13
14    IF P_ENVIRONMENT = 'EAST' THEN
15      R_MY_PROCESS_SYNC_EAST(V_DB_SOURCE_ID); 
16    END IF; 
17
18   --following proc call takes 'out' sys_refcursor as well
19   R_MY_PROCESS_EXPORT_ALL(V_REC);  
20     
21 END CRU_MY_PROCESS_EXPORT;

所以,任何帮助,建议都将不胜感激!

答案 谢谢所有帮助我思考这一点的人......更改参数为" V_REC"到" P_RECORDSET"是答案。

1 个答案:

答案 0 :(得分:1)

我没有看到您使用P_RECORDSET参数执行任何操作的位置。如果调用者希望您返回一个打开的游标,则需要返回一个打开的游标。

我的预感是,您不想申报v_rec本地变量,并希望将p_recordset传递给r_my_process_export_all,我猜测,还有一个类型为OUT的{​​{1}}参数。