Обновление больших таблиц с заменой строк выполняется в ORA-30036: невозможно расширить сегмент
Таблица похожа (с индексом на ID):
CREATE TABLE "DB"."C_DATA"
(
"ID" VARCHAR2(32 CHAR) NOT NULL ENABLE,
"KEY" VARCHAR2(512 CHAR) NOT NULL ENABLE,
"VALUE" CLOB,
"UNIQUE_ID" VARCHAR2(512 CHAR),
"DT_CREATE" TIMESTAMP (6) DEFAULT sysdate,
CONSTRAINT "C_DATA_PK" PRIMARY KEY ("ID")
)
В столбце VALUE находятся строки различной длины от нескольких символов до 1000 символов.
Я должен обновить столбец и заменить некоторые символы, скажем, заменить запятые на точки с запятой:
UPDATE DB.C_DATA tbl
SET VALUE = REPLACE(tbl.VALUE, ',', ';')
WHERE VALUE like '%,%';
С этим у меня сейчас две проблемы:
1) Когда я запускаю это, я сталкиваюсь с «ORA-30036: невозможно расширить сегмент…»
2) Для некоторых значений мне кажется, что это не работает, и не все символы заменены правильно.
Add2: если я работаю с меньшим набором данных, у меня возникает проблема, заключающаяся в том, что для более длинных записей он, кажется, не выполняет свою работу. Так же, как игнорирование замены. (это связано со второй проблемой?)
Add1: как только я тестирую с большим набором данных в БД, он выходит из строя, как ORA-30036 (даже не думая о полном наборе данных (50.000.000 строк))
Ясно, что табличное пространство может быть увеличено, но сейчас это не вариант,
Будет ли способ указать базе данных разбить этот оператор на меньшие задания и выполнять их друг за другом, чтобы не иметь полного набора в пространстве отмены?
Отсутствие этого выполнения / применения не будет проблемой (если оно заканчивается за конечное время).
Если это не выполнимо в оракуле SQL / PLSQL - какой (сценарий) подход был бы возможен?