42

当我尝试在具有数据类型的字段上设置超过 4000 个字符的值时CLOB,它给了我这个错误:

ORA-01704: 字符串文字太长。

任何建议,如果我必须设置无限字符的值,哪种数据类型适用于我,尽管就我而言,它恰好是关于15000字符的。

注意:我尝试存储的长字符串以 ANSI 编码。

4

6 回答 6

55

使用 CLOB 操作时您使用的是什么?

在任何情况下,您都可以使用 PL/SQL 来完成

DECLARE
  str varchar2(32767);
BEGIN
  str := 'Very-very-...-very-very-very-very-very-very long string value';
  update t1 set col1 = str;
END;
/

SQLFiddle 上的证明链接

于 2012-12-19T06:56:07.017 回答
39

尝试将字符拆分为多个块,如下面的查询并尝试:

Insert into table (clob_column) values ( to_clob( 'chunk 1' ) || to_clob( 'chunk 2' ) );

它对我有用。

于 2015-05-13T15:29:21.537 回答
3

为了解决我这边的这个问题,我不得不使用那里已经提出的组合

DECLARE
  chunk1 CLOB; chunk2 CLOB; chunk3 CLOB;
BEGIN
  chunk1 := 'very long literal part 1';
  chunk2 := 'very long literal part 2';
  chunk3 := 'very long literal part 3';

  INSERT INTO table (MY_CLOB)
  SELECT ( chunk1 || chunk2 || chunk3 ) FROM dual;
END;

希望这可以帮助。

于 2019-12-24T14:05:50.177 回答
2

根据您插入的字符,拆分工作直到 4000 个字符。如果您要插入特殊字符,它可能会失败。唯一安全的方法是声明一个变量。

于 2015-08-03T19:11:42.273 回答
0

虽然这是一个非常古老的问题,但我认为分享经验仍然可能对其他人有所帮助:

如果我们通过使用 '||' 将大文本连接成 4000 个字节/字符的块,大文本可以保存在单个查询中

运行以下查询将告诉您:

  1. 要求 包含 4000 字节的块数
  2. 剩余字节

因为,在给定的示例中,您试图保存连续 15000 个字节(字符)的文本,所以,

select 15000/4000 chunk,mod(15000,4000) remaining_bytes from dual;

结果: 在此处输入图像描述

这意味着,您需要连接 3 个 4000 字节的块和一个 3000 字节的块,所以它会像:

INSERT INTO <YOUR_TABLE> 
VALUES (TO_CLOB('<1st_4K_bytes>') || 
        TO_CLOB('<2nd_4K_bytes>') || 
        TO_CLOB('<3rd_4K_bytes>') || 
        TO_CLOB('<last_3K_bytes>)');
于 2022-02-20T11:28:50.170 回答
-1
INSERT INTO table(clob_column) SELECT TO_CLOB(q'[chunk1]') || TO_CLOB(q'[chunk2]') ||
            TO_CLOB(q'[chunk3]') || TO_CLOB(q'[chunk4]') FROM DUAL;
于 2020-12-01T17:59:47.403 回答