如何使用 clob 参数执行 Oracle 程序?

Posted

技术标签:

【中文标题】如何使用 clob 参数执行 Oracle 程序?【英文标题】:How to execute Oracle procedure with clob parameter in? 【发布时间】:2020-09-10 13:13:25 【问题描述】:

我有一个程序

create or replace PROCEDURE PROC_PROJPREL_TEMPL_SERV_MAT(
  P_TABELA IN VARCHAR2,
  P_COLUNAS IN VARCHAR2,
  P_DADOS IN CLOB,
  O_CODIGO OUT NUMBER,
  O_MENSAGEM OUT VARCHAR2
) IS 
BEGIN
  o_codigo := 0;
  o_mensagem := '';
  -- no implementation coded yet
EXCEPTION
  WHEN OTHERS THEN
    raise_application_error(-20101, 'erro ao executar procedure ');    
END PROC_PROJPREL_TEMPL_SERV_MAT;

我需要在 SQL Developer 中执行此操作。

我尝试使用匿名块

declare
  i_tabela varchar2(30);
  i_colunas varchar2(4000);
  i_dados clob;
  o_codigo number;
  o_mensagem varchar2(4000); 
begin
  i_tabela := 'table_name'; -- max 30 characters
  i_colunas := 'columns_names'; -- less 4000 characters
  i_dados := '45000 characters';
  proc_projprel_templ_serv_mat(i_tabela, i_colunas, i_dados, o_codigo, o_mensagem);
end;

但它返回错误“字符串文字太长”

我也尝试使用“呼叫”命令。

call proc_projprel_templ_serv_mat('table_name', 'columns_names', &DATAS);

但它返回错误 ORA-00972 标识符太长,原因:指定了超过 30 个字符的标识符,操作:最多指定 30 个字符。

有人可以帮助我吗?

【问题讨论】:

它可能在您指定 30 个字符的第一个参数处引发错误。传递的第一个参数是什么? 错误到底在哪里抛出?你能检查错误行号并确认吗? 【参考方案1】:

PL/SQL 中字符串文字的最大长度为 32,767 个字符。正如错误“字符串文字太长”所说,您在这里超出了这个限制:

i_dados := '45000 characters';

您必须将该字符串分解为最长 32,767 个字符的部分并将它们连接在一起,例如:

i_dados := 'first 32767 characters' || 
           'remaining 12233 characters';

【讨论】:

大声笑,我读到“45000 个字符”并假设这就是他们所定义的字面意思

以上是关于如何使用 clob 参数执行 Oracle 程序?的主要内容,如果未能解决你的问题,请参考以下文章

CLOB 中的 Oracle 包,长度 > 32767 个字符。如何“立即执行”呢? [关闭]

使用 Mybatis 3 更新 Oracle CLOB 有啥技巧吗?

oracle存储过程clob类型参数为null问题

oracle更新clob字段的问题

Oracle中如何查询CLOB字段类型的内容

php如何读取clob字段