我试图简单地调用一个带有游标的函数(Test2),并返回一个游标。
我遇到了错误:
错误(23,17):PLS-00306:调用' TEST2 '
我的函数调用出了什么问题?
v_resp := TEST2(v_req);
这是我的测试:
CREATE OR REPLACE TYPE TRANS_OBJ AS OBJECT (TRANSNO CHAR(8));
CREATE OR REPLACE TYPE TRANS_OBJ_TAB AS TABLE OF TRANS_OBJ;
CREATE OR REPLACE FUNCTION TEST2 (v_rc IN SYS_REFCURSOR) RETURN TRANS_OBJ_TAB
IS
v_resp TRANS_OBJ_TAB := TRANS_OBJ_TAB();
BEGIN
v_resp.extend;
v_resp(1) := TRANS_OBJ('222222');
RETURN v_resp;
END;
CREATE OR REPLACE FUNCTION TEST1 RETURN TRANS_OBJ_TAB
IS
TRANSNO CHAR(8);
v_cnt number := 0;
v_req TRANS_OBJ_TAB := TRANS_OBJ_TAB();
v_resp TRANS_OBJ_TAB := TRANS_OBJ_TAB();
--v_resp sys_refcursor;
CURSOR v_rc IS SELECT '1111' AS TRANSNO FROM DUAL;
BEGIN
OPEN v_rc;
LOOP
fetch v_rc into TRANSNO;
EXIT WHEN v_rc%NOTFOUND;
v_req.extend;
v_cnt := v_cnt + 1;
v_req(v_cnt) := TRANS_OBJ(TRANSNO);
END LOOP;
CLOSE v_rc;
v_resp := TEST2(v_req);
RETURN v_resp;
END;
/
DROP TYPE TRANS_OBJ_TAB;
DROP TYPE TRANS_OBJ;
DROP FUNCTION TEST1;
DROP FUNCTION TEST2;
答案 0 :(得分:1)
首先,你没有像你说的那样从TEST2函数返回CURSOR(尝试return sys_refcursor
)。
另一方面,v_req不是sys_refcursor,除了v_resp也不能包含游标。查看您正在使用的类型。
希望这有帮助!!!