用另一个 table 中的值替换 clob 中的值

replace a value in clob by a value from another table

我有一个 2 tables,在 table 1 中,我有一个 clob 文件,它有一个错误的值,我需要用另一个 [=32= 的正确值替换它].

表 1

column1 column2 (clob)
1234 abc...N0001234...
2345 askdfa.. N0002434....

上面的 table1 N000**** 是不正确的,现在我有 table2 其中我有正确的值(这不是一个 clob)

表 2

Column1 column2 column3
1234 N0004567 N0001234
2345 N0002435 N0002434

现在我已经尝试了类似下面的东西,但它会抛出错误

update table1
set column2 = replace (column2, select column3 from table2 where table1.column1 = table2.column1,
                              select column2 from table2 where table1.column1 = table2.column1)

where table1.column1 in (select column1 from table2 where table1.column1 = table2.column1);

但是 oracle 抛出了缺少表达式的错误。

有人可以帮我吗?

您可以使用 MERGE 语句:

MERGE INTO table1 dst
USING (
  SELECT t1.ROWID AS rid,
         REPLACE(t1.column2, t2.column3, t2.column2) AS replacement
  FROM   table1 t1
         INNER JOIN table2 t2
         ON (t1.column1 = t2.column1 AND t1.column2 LIKE '%'||t2.column3||'%')
) src
ON (src.rid = dst.ROWID)
WHEN MATCHED THEN
  UPDATE
  SET column2 = src.replacement;

其中,对于示例数据:

CREATE TABLE table1 (column1, column2) AS
SELECT 1234, EMPTY_CLOB() || RPAD('abc', 4000,  '.') || 'N0001234' FROM DUAL UNION ALL
SELECT 2345, TO_CLOB('askdfa.. N0002434....') FROM DUAL;

MERGE之后,table包含:

COLUMN1 COLUMN2
1234 abc.............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................N0004567
2345 askdfa.. N0002435....

db<>fiddle here