错误:ORA-01704:字符串文字太长

ecfdbz9o  于 2022-09-18  发布在  Java
关注(0)|答案(7)|浏览(239)

当我尝试在数据类型为CLOB的字段上设置超过4000个字符的值时,出现以下错误:
ORA-01704:字符串文字太长。

任何建议,如果我必须设置无限个字符的值,哪种数据类型将适用于我,尽管对于我的情况,它恰好是大约15000字符。

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

rqenqsqc

rqenqsqc1#

使用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;
/

SQLFdle上的证明链接

rxztt3cl

rxztt3cl2#

尝试将字符拆分成多个块,如下面的查询所示,然后尝试:

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

这对我很管用。

a8jjtwal

a8jjtwal3#

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

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;

希望这能帮上忙。

92dk7w1h

92dk7w1h4#

拆分将持续到4000个字符,具体取决于您要插入的字符。如果您正在插入特殊字符,则可能会失败。唯一安全的方法是声明一个变量。

mwkjh3gx

mwkjh3gx5#

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

如果我们将大文本分解为4000字节/字符的块,并使用‘||’将它们连接在一起,则可以在单个查询中保存大文本

运行以下查询将告诉您:

1.包含4000字节的区块所需数量
1.剩余字节数

由于在给定示例中您试图保存连续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>)');
fumotvh3

fumotvh36#

INSERT INTO table(clob_column) SELECT TO_CLOB(q'[chunk1]') || TO_CLOB(q'[chunk2]') ||
            TO_CLOB(q'[chunk3]') || TO_CLOB(q'[chunk4]') FROM DUAL;
zwghvu4y

zwghvu4y7#

在SQL Developper中,接受的答案对我不起作用,但这个答案和另一个答案的组合却起到了作用:

DECLARE
  str varchar2(32767);
BEGIN
  update table set column = to_clob('Very-very-...-very-very-very-very-very-very long string value');
END;
/

相关问题