使用字符串替换更新大表时遇到ORA-30036:无法扩展段

时间:2019-01-24 19:43:20

标签: oracle sql-update batch-processing

使用字符串替换更新大表时遇到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行)) 显然可以增加表空间,但是现在这不是一个真正的选择, 是否有一种方法可以告诉数据库将该语句拆分为较小的Jobs,然后彼此执行它们,以使整个集合不进入撤消空间? 一次不执行/应用将不是问题(只要它在有限的时间内完成)。 如果这在oracle SQL语句/ PLSQL中不可行–哪种(可编写脚本)方法可行?

0 个答案:

没有答案