Oracle PL/SQL:从两个函数之间传递的游标获取
我有一个关于从弱类型游标获取结果的快速问题,我想知道以前是否有人遇到过这个问题 我的设置如下 内在功能Oracle PL/SQL:从两个函数之间传递的游标获取,oracle,plsql,cursors,Oracle,Plsql,Cursors,我有一个关于从弱类型游标获取结果的快速问题,我想知道以前是否有人遇到过这个问题 我的设置如下 内在功能 create or replace FUNCTION A_CURSOR_TEST_INNER ( varCursor OUT SYS_REFCURSOR ) RETURN NUMBER AS varStatus NUMBER; BEGIN OPEN varCursor FOR SELECT docid FROM DOCUMENT_TABLE; RETURN 0; E
create or replace FUNCTION A_CURSOR_TEST_INNER
(
varCursor OUT SYS_REFCURSOR
)
RETURN NUMBER
AS
varStatus NUMBER;
BEGIN
OPEN varCursor FOR
SELECT docid
FROM DOCUMENT_TABLE;
RETURN 0;
END;
create or replace FUNCTION A_CURSOR_TEST_OUTER
(
varCursor OUT SYS_REFCURSOR
)
RETURN NUMBER
AS
varStatus NUMBER;
BEGIN
varStatus := A_CURSOR_TEST_INNER(varCursor => varCursor);
RETURN 0;
END;
调用函数
create or replace FUNCTION A_CURSOR_TEST_INNER
(
varCursor OUT SYS_REFCURSOR
)
RETURN NUMBER
AS
varStatus NUMBER;
BEGIN
OPEN varCursor FOR
SELECT docid
FROM DOCUMENT_TABLE;
RETURN 0;
END;
create or replace FUNCTION A_CURSOR_TEST_OUTER
(
varCursor OUT SYS_REFCURSOR
)
RETURN NUMBER
AS
varStatus NUMBER;
BEGIN
varStatus := A_CURSOR_TEST_INNER(varCursor => varCursor);
RETURN 0;
END;
测试线束代码
DECLARE
varCursor SYS_REFCURSOR;
v_Return NUMBER;
BEGIN
v_Return := A_CURSOR_TEST_OUTER(varCursor => varCursor);
DECLARE
docid_ NUMBER;
BEGIN
IF(varCursor %ISOPEN) THEN
LOOP
FETCH varCursor INTO docid_ ;
EXIT WHEN varCursor %NOTFOUND;
DBMS_OUTPUT.PUT_LINE(' docid_:' || docid_ );
END LOOP;
CLOSE varCursor ;
END IF;
END;
END;
如果我运行测试线束代码,我得到的错误是
ORA-06504:PL/SQL:
结果集变量或查询不可用
匹配
我真的不确定是什么导致了这种情况的发生。错误发生在我的测试代码中,但我以前使用过几百次完全相同的方法,没有遇到这个问题。现在唯一的区别是,游标通过两个函数而不是一个函数向上传递
有人知道这里可能有什么问题吗?我已经在谷歌上搜索过了,我能找到的只是关于强输入光标的建议,不幸的是,这对我来说不是一个选项
谢谢任何人能给予的帮助,干杯。我可以复制你的问题,对我来说这似乎是一个甲骨文错误。通过谷歌搜索我发现的错误。尝试将
OUT
参数更改为IN-OUT
,看看这是否解决了问题。