是否可以使用 SQL 更新 CLOB 内的数据?

发布于 2024-09-07 06:54:28 字数 80 浏览 6 评论 0原文

我有一张表,其中有一个 clob 列,其中包含 XML 数据。 假设我想在 clob 列中将 XYZ 替换为 ABC。 可以使用sqlplus吗?

I have a table having one clob column which has XML data in it.
Say I want to replace XYZ with ABC in the clob column.
Is it possible using sqlplus?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

堇年纸鸢 2024-09-14 06:54:28

为什么不尝试一下呢?

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>

Why not try it ?

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>
蛮可爱 2024-09-14 06:54:28

“我在列中有新行。任何
建议?”

换行符是字符;如果你想修改包含它们的文本,你需要将它们包含在搜索字符串中。你可以使用 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 它具有许多有用的功能。

"i have new line in the column. any
advice?"

Newlines are characters; if you want to amend text which contains them you need to include them in the search string. You can do this using the CHR() which takes an ASCII value as an argument. The precise codes you need to include vary according to OS. Because I ran this example on MS Windows I needed to pass both linefeed (ASCII=10) and carriage return (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>

Incidentally, if you are storing XML text it might be worthwhile using the XMLType datatype for the column instead of CLOB. It comes with a lot of useful functionality.

任谁 2024-09-14 06:54:28

是的,使用一个 REPLACE() 函数就可以实现这一点。尝试:

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

Yes, it's possible with one REPLACE() function. Try:

update nnn set c1 = REPLACE(c1,'ABC>','XYZ>')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文