【发布时间】:2008-11-28 11:06:28
【问题描述】:
我有一个关于从弱类型游标中获取结果的快速问题,想知道以前是否有人遇到过这个问题?
我的设置如下;
内部函数;
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:返回类型 结果集变量或查询不 匹配
我不确定是什么导致了这种情况发生。该错误发生在我的测试代码中,但我之前已经使用了数百次完全相同的方法并且没有遇到这个问题。现在唯一的区别是,光标是通过两个函数而不是一个函数传回的。
有谁知道这里可能存在什么问题?我已经在 Google 上搜索过了,我能找到的只是强烈键入光标的建议,不幸的是,这对我来说不是一个选项。
感谢任何人提供的任何帮助,干杯。
【问题讨论】:
-
尝试将
OUT参数更改为IN OUT看看是否可以解决问题。