SQL截断Clob字段

时间:2018-08-27 06:03:15

标签: sql oracle where-clause truncate clob

在Oracle中,我有一个类似于以下查询:

CREATE TABLE my_table
(
    my_field CLOB,
    my_field2 VARCHAR2(50 CHAR),
    my_field3 VARCHAR2(5 CHAR),
)

,我想运行此查询:

select count(*)
from my_table
where my_field = substr('...',4000,1)

运行查询时,出现错误:

  
      
  1. 00000-“字符串文字太长”
      *原因:字符串文字长于4000个字符。
      *操作:请使用最多4000个字符的字符串文字。
             只能使用绑定变量输入更长的值。
  2.   

请咨询!

2 个答案:

答案 0 :(得分:1)

如错误消息所述,Oracle正在过渡,因为您正尝试使用其中包含4000多个字节的字符串文字。一种替代方法是使用绑定变量(如建议的那样):

VARIABLE my_field CLOB;
EXEC :my_field := 'some really long text here longer than 4000 bytes';

SELECT COUNT(*)
FROM my_table
WHERE my_field = :my_field;

答案 1 :(得分:0)

您正在使用具有4000个字符的substr,由于内存超过4k字节,因此您的字符集可能是多字节字符集。 我可以建议的另一种方法是使用plsql varchar2变量。上限为32767。

Declare
 my_field varchar2(32767) := <Long text>;
 v_count number;
begin
SELECT COUNT(*) into v_count FROM my_table
WHERE my_field = my_field;

end;
/