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

问题描述

我有个程序

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”命令。

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

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

有人可以帮助我吗?

解决方法

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

i_dados := '45000 characters';

您必须将该字符串分成最多32,767个字符的部分,并将其连接在一起,例如:

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...