Oracle 是否计算refcursor中的行数?
我有一个将refcursor作为out参数的过程。我需要计算ref游标中的行数,如果超过最大限制,我需要发送错误消息Oracle 是否计算refcursor中的行数?,oracle,plsql,oracle11g,plsqldeveloper,Oracle,Plsql,Oracle11g,Plsqldeveloper,我有一个将refcursor作为out参数的过程。我需要计算ref游标中的行数,如果超过最大限制,我需要发送错误消息 请建议我如何计算ref光标中的行数。您可以执行以下操作: FUNCTION SOME_FUNC(pin_Count_limit NUMBER, pout_Cursor SYS_REFCURSOR) RETURN NUMBER -- returns the number of lines the cursor should r
请建议我如何计算ref光标中的行数。您可以执行以下操作:
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;
请注意,由于在打开“计数”光标和打开“真实”光标之间的数据库活动,“真实”光标返回的行数可能与预期的不同
共享并享受。除了获取所有行之外,没有其他方法可以计算refcursor的行数。@Mani:不获取行数,就无法获取refcursor的行数。一种可能的解决方案是在光标的select子句中添加另一列count*,这将为您提供游标中的总记录数。因此,在获取第一条记录后,您将了解游标中的总计数,基于此,您可以继续执行您的逻辑,但这种方法速度较慢,不推荐使用。请查看此帖子