Estou com um problema em um procedimento que armazena informações de texto e depois envia por email em um arquivo em anexo. O intuito do procedimento que eu fiz é: a partir do conteúdo de uma consulta em uma view, vou incluindo linha a linha em uma variável do tipo CLOB e depois, preciso enviar esse conteúdo em um email com o arquivo(txt) em anexo.
Tudo isso que eu disse acima está funcionando, porém, com uma restrição. A consulta original retorna 150 linhas, mas se eu deixar assim, aparece o erro: ORA-06502: PL/SQL: erro numérico ou de valor.
Se eu limitar o resultado da consulta em 50 linhas, todo o procedimento funciona perfeitamente.
O erro aparece se eu utilizar a rotina de envio de email e aparece também se eu usar um simples DBMS_OUTPUT.PUT_LINE.
O conteúdo desse arquivo txt tem mais ou menos, em cada linha, 600 caracteres.
Será que alguém consegue me dar uma mão? Segue abaixo o procedimento:
DECLARE
TYPE V_CONTEUDO_ARRAY IS TABLE OF CLOB;
V_CONTEUDO V_CONTEUDO_ARRAY;
V_ARQUIVO CLOB;
V_STATUS INTEGER;
V_LINHA LONG;
V_TESTE BOOLEAN;
NOME_ARQUIVO VARCHAR2(50);
CURSOR CONTEUDO IS
SELECT CONTEUDO
FROM VW_INTEGRACAO_GOVRJ
WHERE ROWNUM <= 50
ORDER BY ORDEM;
BEGIN
OPEN CONTEUDO;
FETCH CONTEUDO BULK COLLECT
INTO V_CONTEUDO;
CLOSE CONTEUDO;
V_TESTE := TRUE;
DBMS_OUTPUT.ENABLE(NULL);
FOR I IN 1 .. V_CONTEUDO.COUNT LOOP
IF V_TESTE = TRUE THEN
V_ARQUIVO := V_CONTEUDO(I);
V_TESTE := FALSE;
V_STATUS := V_CONTEUDO.COUNT;
ELSE
V_ARQUIVO := V_ARQUIVO || CHR(13) || CHR(10) || V_CONTEUDO(I);
END IF;
END LOOP;
SEND_MAIL(V_FROM => 'xxxxxx',
V_RECIPIENT => 'yyyyyy',
V_SUBJECT => 'assunto teste',
V_BODY => 'conteudo teste',
V_NOME_ARQUIVO => NOME_ARQUIVO,
V_CONTEUDO_ARQUIVO => V_ARQUIVO);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Exception, Quantidde de Linhas = ' || V_STATUS);
DBMS_OUTPUT.PUT_LINE(SQLERRM);
DBMS_OUTPUT.PUT_LINE(V_LINHA);
END;