Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql &引用;PLS-00172:字符串文字太长“;将大字符串值设置为CLOB时引发错误_Sql_Database_Oracle_Stored Procedures_Oracle Sqldeveloper - Fatal编程技术网

Sql &引用;PLS-00172:字符串文字太长“;将大字符串值设置为CLOB时引发错误

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

我有一个存储过程,它有一个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文本,然后自动转换为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));