Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 尝试执行pl/sql时出错,该pl/sql在仅包含ROWID';s_Oracle_Plsql_Oracle11g_Rowid - Fatal编程技术网

Oracle 尝试执行pl/sql时出错,该pl/sql在仅包含ROWID';s

Oracle 尝试执行pl/sql时出错,该pl/sql在仅包含ROWID';s,oracle,plsql,oracle11g,rowid,Oracle,Plsql,Oracle11g,Rowid,我正在尝试更新给定表中的所有列。 此表中有约200000000条记录 尝试运行简单的update语句无效 这是我的密码: 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; LOO

我正在尝试更新给定表中的所有列。 此表中有约200000000条记录

尝试运行简单的update语句无效

这是我的密码:

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 c_rowIdCursor
    IS SELECT ROWID 
         FROM SOME_TABLE;

当然,我不知道为什么简单的更新不起作用。它将更高效,使用更少的资源,需要更少的代码。

它因共享池内存而中断。
无法按X扩展段。
错误。@scraskythenell-确切的错误是什么?通常,如果您试图将更新拆分为多个部分,您也会遇到相同的错误--听起来您的一个表空间的空间不足。我认为是undo表空间太小了。分解它是有效的。在更新所有行之前,
SOME_KEY
NULL是否为所有行?如果是这样的话,您可以通过一个简单的
更新来实现这一点……其中某个_键为NULL,而ROWNUM则太慢了。我已经试过了。这花费了4倍的时间(3.7小时)。我的评论旨在帮助您克服“内存不足”问题,这意味着牺牲性能。尽管如此,在
某些键上使用合适的函数索引来克服性能问题可能是可行的,这可能适合您的情况,也可能不适合您的情况。我们已将撤消表空间扩展到60GB,但插入仍然不起作用。然而,删除返回ROWID起了作用。