用另一个 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
我有一个 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