Converter ARRAY para CLOB

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Tinho
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 319
Registrado em: Seg, 16 Nov 2009 4:50 pm
Localização: São Paulo - SP

Boa noite senhores,

Estou analisando um processo, que recebe o conteúdo de um arquivo dispostos em um "array"
V_SCRIPT_OBJETO DBMS_SQL.VARCHAR2A;
V_SQL CLOB;

FOR I IN P_SCRIPT_OBJETO.FIRST .. P_SCRIPT_OBJETO.LAST LOOP
V_LINHA := REPLACE(P_SCRIPT_OBJETO(I), CHR(13), '');
V_SCRIPT_OBJETO(I) := V_LINHA;
V_FINAL := I;

V_SQL := V_SQL || V_SCRIPT_OBJETO(I);
END LOOP;
Porém eu criei a variável:
V_SQL CLOB;
Afim de gravar o conteúdo do arquivo recebido na coluna de tabela de log:
-- Coluna da tabela: LOG_VERSIONAMENTO_GTO do tipo CLOB

P_ARQUIVO CRM5.LOG_VERSIONAMENTO_GTO.ARQUIVO%TYPE -- CLOB
Mas ao chamar a procedure que deverá gravar o log, passando como parâmetro a variável: V_SQL para a coluna: P_ARQUIVO, recebo o erro abaixo:

Selecionar tudo

      P_REC_LOG(  'SC'
                 ,(DBMS_UTILITY.GET_TIME - G_START_TIME)/100
                 ,0
                 ,'S'
                 ,'IF - P_TIPO_OBJETO = ' || P_TIPO_OBJETO
                 ,V_SQL );
ORA-06502: PL/SQL: numeric or value error: character string buffer too small]
Creio que o erro, seja dessa atribuição:
V_SQL := V_SQL || V_SCRIPT_OBJETO(I);
Ainda, tentei associar direto a variável: V_SCRIPT_OBJETO (DBMS_SQL.VARCHAR2A), diretamente na chamada da procedure e recebo o erro:

Selecionar tudo

      P_REC_LOG(  'SC'

                 ,(DBMS_UTILITY.GET_TIME - G_START_TIME)/100
                 ,0
                 ,'S'
                 ,'IF - P_TIPO_OBJETO = ' || P_TIPO_OBJETO
                 ,V_SCRIPT_OBJETO); -- V_SQL );
Error: PLS-00306: wrong number or types of arguments in call to 'P_REC_LOG'
Obviamente, por conta do data type da coluna ser um CLOB e o valor passado ser um: DBMS_SQL.VARCHAR2A.

Em resumo, como posso gravar na tabela de log, o conteúdo do arquivo recebido por um parâmetro de entrada do tipo: DBMS_SQL.VARCHAR2A?

Desde de já agradeço quem possa ajudar!

Att.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes