Можно ли обновить данные внутри CLOB с помощью SQL? - PullRequest
5 голосов
/ 29 июня 2010

У меня есть таблица с одним столбцом clob, в котором есть данные XML. Скажем, я хочу заменить XYZ на ABC в столбце clob. Возможно ли использовать sqlplus?

Ответы [ 3 ]

6 голосов
/ 29 июня 2010

Почему бы не попробовать?

SQL> create table nnn(c1 clob);

Table created.

SQL> insert into nnn values ('text ABC end');

1 row created.

SQL> select * from nnn;

C1
-------------------------------------------------
text ABC end

SQL> update nnn set c1=replace(c1,'ABC','XYZ');

1 row updated.

SQL> select * from nnn;

C1
-------------------------------------------------
text XYZ end

SQL>
5 голосов
/ 29 июня 2010

"У меня новая строка в столбце. Любой совет?"

Символы новой строки;если вы хотите изменить текст, который содержит их, вам нужно включить их в строку поиска.Вы можете сделать это, используя CHR (), который принимает значение ASCII в качестве аргумента.Точные коды, которые нужно включить, зависят от ОС.Поскольку я запускал этот пример в MS Windows, мне нужно было передать и перевод строки (ASCII = 10), и возврат каретки (ASCII = 13).

SQL> select * from t42
  2  /

TXT
--------------------------------------------------------------------------------
<ABC> ABCD
  </ABC>


SQL>  update t42 set txt=replace(txt,'ABCD'||chr(10)||chr(13), 'APC woz here')
  2  /

1 row updated.

SQL> select * from t42
  2  /

TXT
--------------------------------------------------------------------------------
<ABC> APC woz here </ABC>

SQL>

Кстати, если вы храните текст XML, это можетстоило бы использовать тип данных XMLType для столбца вместо CLOB.Он поставляется с большим количеством полезных функций.

0 голосов
/ 19 апреля 2016

Да, это возможно с одной функцией REPLACE ().Попробуйте:

update nnn set c1 = REPLACE(c1,'ABC>','XYZ>')
...