sql - 将大字符串值设置为 CLOB 时抛出 "PLS-00172: string literal too long"错误

标签 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
    P(C => C);
end;
/

问题:

"PLS-00172: string literal too long" error is thrown while invoking stored proc

最佳答案

'' 是一个 varchar2-Literal,然后会自动转换为 CLOB。要将大文字转换为 clob,您可以将其拆分为不同的部分,然后将它们连接起来:

declare
  c clob := TO_CLOB('First 32k characters')||TO_CLOB('Second 32k characters')||...;
begin
    P(C => C);
end;
/

关于sql - 将大字符串值设置为 CLOB 时抛出 "PLS-00172: string literal too long"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64152987/

相关文章:

mysql - JOIN 和 GROUP_CONCAT 三张表

mysql - SQL简单地从两个表中选择*

sql - 插入临时值(选择....按 ID 排序)

database - 使用 sql.Open 进行 SQLite3 数据库连接

java - log4j2记录数据库varchar2错误

sql - 基于函数的索引在 Oracle 12c 中不起作用

sql - 准备好的语句中空 LIKE 的性能影响

php - 如何从mysql中删除多个子表?

mysql - 数据库数据自己的分区

oracle - 在 Oracle 11g 数据库中使用 OpenAI API (chatgpt)