Sql 使用“调用Oracle存储过程”;“出去”;存储过程中的ref_游标
我尝试在存储过程中调用一组Oracle存储过程。只要我的进程没有返回记录集并接受“in”参数,我就没事;但是,其中一个存储过程具有sys_refcursor的“out”参数。调用内部进程也可以很好地工作,但是一旦我用一些参与逻辑来总结它们,我就会遇到问题 具体来说,我得到以下错误:Sql 使用“调用Oracle存储过程”;“出去”;存储过程中的ref_游标,sql,oracle,stored-procedures,Sql,Oracle,Stored Procedures,我尝试在存储过程中调用一组Oracle存储过程。只要我的进程没有返回记录集并接受“in”参数,我就没事;但是,其中一个存储过程具有sys_refcursor的“out”参数。调用内部进程也可以很好地工作,但是一旦我用一些参与逻辑来总结它们,我就会遇到问题 具体来说,我得到以下错误: Error starting at line 2 in command: EXECUTE CRU_MY_PROCESS_EXPORT (1,'EAST',P_RECORDSET => :RC) Error
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”的第19行更改为“P_RECORDSET”就是答案。
我看不出您在哪里使用
P_RECORDSET
参数。如果调用方希望您返回打开的游标,则需要返回打开的游标
我的直觉是,你不想声明一个
v_rec
局部变量,你想把p_记录集
传递给r_我的进程_导出_所有
,我猜它也有一个OUT
类型的SYS_REFCURSOR
参数,你似乎没有填充p_记录集
;你是否应该传递R\u MY\u PROCESS\u EXPORT\u ALL
而不是V\u REC
?@Alex Poole:我编辑了上面的过程以供参考。对……因此,我尝试将我的p\u记录集传递给R\u MY\u PROCESS\u EXPORT\u ALL(p\u记录集),但它无法编译,因为这个内部过程带有一个“out”参数。好吧……我现在觉得很傻。。。我想我累了。。。我从上面的参数传入了p_记录集,现在它正在工作…啊!嗨,贾斯汀,我不知道我在想什么。。。我猜我已经玩了这么久,我有错误的语法…我只是按照你的建议,它的工作!谢谢