首页 > 解决方案 > 如何将 CLOB 类型的参数传递给具有 100k+ 长度字符串的 Oracle 存储过程?

问题描述

 Create procedure p(p1 clob) as 
(
##code goes here..
);

exec p('100k+ length string...');

当我用 100k+ 长度的字符串尝试上述过程时,它抛出 ORA-20002: -20002:ORA-20002: -6502:ORA-06502: PL/SQL: numeric or value error\nORA-06512: at

我们如何将值传递给存储过程?我们是否需要增加 db_block_size 来增加 CLOB 数据类型的容量?

标签: oracleplsqloracle12c

解决方案


您可以像其他数据类型(在 db<>fiddle 上)一样将 clob 传递给过程:

create or replace procedure p (p1 clob) as 
begin 
    dbms_output.put_line ('clob len='||length (p1)); 
end;
/
declare 
    c clob := '123';
begin
    for i in 1..4 loop
        dbms_lob.append (c, rpad ('A', 32767, 'A')); end loop; 
    p (c);
end;
/

克洛布 len=131071


推荐阅读