尝试执行 pl/sql 时出错,该 pl/sql 循环遍历仅包含 ROWID 的游标



我正在尝试更新给定表中的所有列。此表中包含 ~200,000,000 条记录。

尝试运行简单的更新语句不起作用。

这是我的代码:

DECLARE
    TYPE ROW_ID_TBL IS TABLE OF ROWID;
    CURSOR c_rowIdCursor RETURN ROWID IS
        SELECT ROWID FROM SOME_TABLE;
    v_RowIDs ROW_ID_TBL;
BEGIN
    OPEN c_rowIdCursor;
    LOOP
        FETCH c_rowIdCursor BULK COLLECT INTO v_RowIDs LIMIT 50000;
        EXIT WHEN v_RowIDs.COUNT = 0;
        FORALL i IN v_RowIDs.FIRST..v_RowIDs.LAST
            UPDATE SOME_TABLE
               SET SOME_KEY = MOD(NVL(REGEXP_REPLACE(ALPHA_NUMERIC_VAL, '[^0-9]+', ''), 0), 300)+1
             WHERE ROWID = v_RowIDs(i);
        COMMIT;
    END LOOP;
END;
/

当我尝试运行它时,我得到以下结果:

ORA-06550: line 3, column 33:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 3, column 5:
PL/SQL: Item ignored

您的CURSOR定义不正确。 你想要类似的东西

CURSOR c_rowIdCursor
    IS SELECT ROWID 
         FROM SOME_TABLE;

当然,我不确定为什么简单的更新不起作用。 它会更有效率,它会使用更少的资源,并且需要更少的代码。

相关内容

  • 没有找到相关文章