在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)
运行查询时,出现错误:
- 00000-“字符串文字太长”
*原因:字符串文字长于4000个字符。
*操作:请使用最多4000个字符的字符串文字。
只能使用绑定变量输入更长的值。
请咨询!
答案 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;
/