我有一个将 refcursor 作为 out 参数的程序。我需要计算引用游标中的行数,如果它超过最大限制,我需要发送错误消息。
请建议我如何计算参考游标中的行数
我有一个将 refcursor 作为 out 参数的程序。我需要计算引用游标中的行数,如果它超过最大限制,我需要发送错误消息。
请建议我如何计算参考游标中的行数
您可以执行以下操作:
FUNCTION SOME_FUNC(pin_Count_limit NUMBER,
pout_Cursor SYS_REFCURSOR)
RETURN NUMBER -- returns the number of lines the cursor should return
IS
strBasic_sql VARCHAR2(32767) :='SELECT COL1, COL2, COL3 FROM TABLE1';
cursorOut SYS_REFCURSOR;
cursorCount SYS_REFCURSOR;
nCount NUMBER;
bCursor_out_open BOOLEAN := FALSE;
bCursor_count_open BOOLEAN := FALSE;
BEGIN
OPEN cursorCount FOR 'SELECT COUNT(*) FROM (' || strBasic_sql || ')';
bCursor_count_open := TRUE;
FETCH cursorCount INTO nCount;
CLOSE cursorCount;
bCursor_count_open := FALSE;
IF nCount < pin_Count_limit THEN
OPEN cursorOut FOR strBasic_sql;
bCursor_out_open := TRUE;
pout_Cursor := cursorOut;
ELSE
DBMS_OUTPUT.PUT_LINE('Cursor returns too many rows');
END IF;
RETURN nCount;
EXCEPTION
WHEN OTHERS THEN
IF bCursor_count_open = TRUE THEN
CLOSE cursorCount;
END IF;
IF bCursor_out_open = TRUE THEN
CLOSE cursorOut;
END IF;
RAISE;
END SOME_PROC;
请注意,由于在打开“计数”游标和打开“真实”游标之间数据库中的活动,“真实”游标返回的行数可能与预期不同.
分享和享受。