Sql &引用;PLS-00172:字符串文字太长“;将大字符串值设置为CLOB时引发错误
我有一个存储过程,它有一个CLOB字段。当我用一个大值(超过33K个字符)调用存储过程时,会出现错误“PLS-00172:字符串文字太长” 我的存储过程Sql &引用;PLS-00172:字符串文字太长“;将大字符串值设置为CLOB时引发错误,sql,database,oracle,stored-procedures,oracle-sqldeveloper,Sql,Database,Oracle,Stored Procedures,Oracle Sqldeveloper,我有一个存储过程,它有一个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
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文本,然后自动转换为CLOB。要将较大的文字转换为clob,可以将其拆分为不同的部分,然后进行合并:
声明
c clob:=TO_clob(“前32k个字符”)| | TO_clob(“第二32k个字符”)| |。。。;
开始
P(C=>C);
结束;
/
很抱歉这么说,但在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专栏中的数据
请记住,您的过程p将打印字符串“dbms_lob.getLength(c)”,而不是打印变量c的长度。你需要去掉撇号
dbms_output.put_line(dbms_lob.getlength(c));