我在Oracle数据库中有一个表,其中包含数据类型为CLOB
的字段。字段名称为XMLString
。我正在存储每个记录长度为10,000个字符的XML字符串。我在这张表中有超过10万条记录。
我需要更新特定位置的每条记录上的XML字符串段。例如,我需要使用“我的新文本”等字符串更新第14个位置的每个记录。此替换文本长度为11个字符。所以这只是意味着它将从第14个角色开始取代11个追逐者。
我尝试使用DBMS_LOB.FRAGMENT_REPLACE
,但这并不是我想要的。
是否有像
这样的简单命令Replace(XMLString, 14, ‘My New text’)
这样我可以做下面的事情吗?
UPDATE MYTABLE
SET MyClobField = Replace(MyClobField, 14, 'My New text')
WHERE MyTableID>5000
任何帮助都将不胜感激。
答案 0 :(得分:5)
使用
的SQLUPDATE MYTABLE
SET MyClobField = substr(MyClobField, 1, 10) || to_clob('MyNewtext')||substr(MyClobField, 10+length('MyNewtext')+1)
where..
只需将“10”的两次出现更改为偏移量。
或在PL / SQL中使用DBMS_LOB.WRITE API(这比上面更快)
SQL> create table foo(c clob);
Table created.
SQL> insert into foo values ( 'this is a test string ' || rpad('x', 20, 'x'));
1 row created.
SQL> commit;
Commit complete.
SQL> select * from foo;
C
--------------------------------------------------------------------------------
this is a test string xxxxxxxxxxxxxxxxxxxx
SQL> declare
2 v_lob clob;
3 begin
4
5 for r_lob in (select c
6 from foo
7 for update)
8 loop
9 dbms_lob.write(r_lob.c, 6, 16, 'phrase'); -- ie write at offset 16, 6 bytes
10 end loop;
11 end;
12 /
PL/SQL procedure successfully completed.
SQL> select * from foo;
C
--------------------------------------------------------------------------------
this is a test phrase xxxxxxxxxxxxxxxxxxxx
答案 1 :(得分:0)
尝试一下:-
更新表设置列= replace(column,'hello','abcded')