使用游标测试时,使用函数返回游标,调用次数稍微多就报错
模拟数据
CREATE TABLE TM_TEST (L_RISK_NO1 varchar(10),L_RISK_NO2 varchar(10))
1、这种没问题。
DECLARE
-- Non-scalar parameters require additional processing
PL_SERIAL_NO VARCHAR2(32767) := 111;
P_ENTRY_RELATION_CURSOR SYS_REFCURSOR;
P_ENTRY_RELATION_CUR SYS_REFCURSOR;
result SYS_REFCURSOR;
BEGIN
-- Call the function
FOR I IN 1.. 40 LOOP
DBMS_OUTPUT.PUT_LINE(I);
OPEN P_ENTRY_RELATION_CUR FOR
SELECT A.L_RISK_NO1,
A.L_RISK_NO2
FROM TM_TEST A
WHERE A.L_RISK_NO1 = I
OR A.L_RISK_NO2 = I;
END LOOP;
END
2、这种有问题,调用次数40次就报错(可能机器不一样,情况不一样)
DECLARE
-- Non-scalar parameters require additional processing
PL_SERIAL_NO VARCHAR2(32767) := 111;
P_ENTRY_RELATION_CURSOR SYS_REFCURSOR;
P_ENTRY_RELATION_CUR SYS_REFCURSOR;
result SYS_REFCURSOR;
BEGIN
-- Call the function
FOR I IN 1.. 40 LOOP
DBMS_OUTPUT.PUT_LINE(I);
P_ENTRY_RELATION_CURSOR := FN_9902_TR_TM_TEST(I);
END LOOP;
END
--报错
maximum open cursors exceeded at function RISK.FN_9902_TR_TM_TEST
导致返回游标的函数不能过多的使用。
FN_9902_TR_TM_TEST内容
CREATE OR REPLACE FUNCTION FN_9902_TR_TM_TEST(PL_SERIAL_NO VARCHAR2)
RETURN SYS_REFCURSOR
AS
P_ENTRY_RELATION_CUR SYS_REFCURSOR;
BEGIN
OPEN P_ENTRY_RELATION_CUR FOR
SELECT A.L_RISK_NO1,
A.L_RISK_NO2
FROM TM_TEST A
WHERE A.L_RISK_NO1 = PL_SERIAL_NO
OR A.L_RISK_NO2 = PL_SERIAL_NO;
RETURN P_ENTRY_RELATION_CUR;
END FN_9902_TR_TM_TEST;