我有一个存储过程,它有一个CLOB字段。当我调用具有大值(超过33K个字符(的存储过程时;PLS-00172:字符串文字太长";
我的存储过程
create or replace procedure P(c clob) is
begin
dbms_output.put_line('dbms_lob.getlength(c)');
end;
调用存储过程
declare
C CLOB := 'large text over 33k characters';
begin
P(C => C);
end;
/
问题:
"PLS-00172:字符串文字太长";调用存储过程时引发错误
'<文本>'是一个varchar2-Literal,然后自动转换为CLOB。要将一个大的文本转换为clob,您可以将其拆分为不同的部分,然后将它们连接起来:
declare
c clob := TO_CLOB('First 32k characters')||TO_CLOB('Second 32k characters')||...;
begin
P(C => C);
end;
/
很抱歉,但Oracle不允许在字符串文字中键入超过32K个符号(字符串文字是指介于两个撇号之间的所有符号(。
你必须把它分开才能以这种方式进行。
declare
C CLOB;
begin
c := 'a long string literal';
c := c || 'another long string literal';
P(C => C);
end;
//Output is: 63058
我建议你先阅读一些clob列中的数据
PS。请记住,您的程序P将打印一个字符串";dbms_lob.getLength(c("而不是打印变量c的长度。您需要删除撇号。
dbms_output.put_line(dbms_lob.getlength(c));