2014-03-25 203 views
0

我想基本上调用存储过程中的一组Oracle存储过程。只要我的proc没有返回记录集并采用“in”参数,我很好;但是,其中一个存储过程具有sys_refcursor的“out”参数。调用内部过程也可以正常工作,但是一旦我用一些独立逻辑包装起来,我就会遇到问题。调用存储过程中的“out”ref_cursor的Oracle存储过程

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

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”他回答的第19行。

+0

你似乎没有填充'P_RECORDSET';你应该传递'R_MY_PROCESS_EXPORT_ALL'而不是'V_REC'吗? –

+0

@Alex Poole:我编辑了上面的参考文献。正确...因此,我尝试将我的p_recordset传递给R_MY_PROCESS_EXPORT_ALL(p_recordset),但它不会编译,因为此内部过程需要'out'参数。 – saipanman

+0

好吧......我现在觉得很傻......我想我已经很累了......我从上面的参数中传递了p_recordset,现在它的工作......呃! – saipanman

回答

1

我不明白你在做什么,你的P_RECORDSET参数。如果调用者希望你返回一个打开的游标,你需要返回一个打开的游标。

我的直觉是,你不想来声明v_rec局部变量,要传递给p_recordset其中r_my_process_export_all,我猜,也有SYS_REFCURSOR类型的OUT参数。

+0

嗨贾斯汀,我不知道我在想什么......我想我一直在玩这个这么久,我的语法错了......我只是按照你的建议做了,它的工作!谢谢! – saipanman