› Fóruns › SQL e PL/SQL › Duvida – String com caracteres › Duvida – String com caracteres
CREATE OR REPLACE PROCEDURE ESSAKAI.PRC_XML_BUILDER_v1p3(pCD_XML in number,
pNM_ACAO in varchar2,
pMSG out varchar2) ISvXML_Versao_Ausente boolean := true;
in_file utl_file.file_type;
linebuf varchar2(32767);
filename varchar2(240);
buf_lob CLOB;
vMSG varchar2(240) default ‘Sucesso’;
vnCounter number := 0;BEGIN
filename := fun_XML_Nome_Arquivo(pNM_ACAO);
if filename is not null then
in_file := utl_file.fopen(‘DIR_XML_BFILE’, filename, ‘w’, 32767);BEGIN
Declare
— Documentos Assinados
cursor c4 is
select xdp.xdp_id_xct,
xdp.xdp_id_cbr,
substr(xdp.xdp_nm_doc, 1, length(xdp.xdp_nm_doc) – 4) xdp_nm_doc,
xdp.xdp_doc_locator,
xdp.xdp_doc_blob
from hw_xml_docprotesto xdp;
–where xdp.xdp_id_xct = pid_xct;
—
vAuxc4 c4%rowtype;
vQT_Carac pls_integer default 1024; — Quantidade de caracteres lidos de uma vez “Limitado ao tamanho do buffer 32767″
vTT_Compr pls_integer; — Quantidade de caracteres do campo blob
vNR_Grupo pls_integer := 0; — Parte inteira do Resultado de vTT_Compr dividido por vQT_Carac
vQT_Resto pls_integer := 0; — Parte resto do Resultado de vTT_Compr dividido por vQT_Carac
l_offset pls_integer default 1; — Ponteiro para início de leitura
primeira_vez boolean := true;
—
Begin
open c4;
fetch c4
into vAuxc4;
if c4%found then
vTT_Compr := nvl(dbms_lob.getlength(vAuxc4.xdp_doc_blob), 0);
vNR_Grupo := TRUNC(vTT_Compr / vQT_Carac);
vQT_Resto := MOD(vTT_Compr, vQT_Carac);For i in 1 .. vNR_Grupo loop
if primeira_vez then
linebuf := linebuf ||
dbms_lob.substr(vAuxc4.xdp_doc_blob,
vQT_Carac,
l_offset);
primeira_vez := FALSE;
else
linebuf := dbms_lob.substr(vAuxc4.xdp_doc_blob,
vQT_Carac,
l_offset);
end if;
l_offset := l_offset + vQT_Carac;
utl_file.put(in_file, linebuf); –alterado
— utl_file.put(in_file, linebuf);
linebuf := null;
— utl_file.fflush(in_file);if i = 30 then
exit;
linebuf := null;
end if;end loop;
linebuf := dbms_lob.substr(vAuxc4.xdp_doc_blob,
vQT_Resto – 2,
l_offset);
linebuf := linebuf || ‘” ‘;
utl_file.put(in_file, linebuf);
— utl_file.put ( in_file,linebuf ) ;
linebuf := null;
— utl_file.fflush(in_file);
end if;
close c4;
/* Exception
When UTL_FILE.INVALID_PATH then vMSG := sqlerrm; dbms_output.put_line( ‘Otre.: 1 ‘||chr(10)||vMSG );
When UTL_FILE.INVALID_MODE then vMSG := sqlerrm; dbms_output.put_line( ‘Otre.: 2 ‘||chr(10)||vMSG );
When UTL_FILE.INVALID_FILEHANDLE then vMSG := sqlerrm; dbms_output.put_line( ‘Otre.: 3 ‘||chr(10)||vMSG );
When UTL_FILE.INVALID_OPERATION then vMSG := sqlerrm; dbms_output.put_line( ‘Otre.: 4 ‘||chr(10)||vMSG );
When UTL_FILE.READ_ERROR then vMSG := sqlerrm; dbms_output.put_line( ‘Otre.: 5 ‘||chr(10)||vMSG );
When UTL_FILE.WRITE_ERROR then
vMSG := sqlerrm;
dbms_output.put_line( ‘Otre.: 6 ‘||chr(10)||vMSG );
When UTL_FILE.INTERNAL_ERROR then vMSG := sqlerrm; dbms_output.put_line( ‘Otre.: 7 ‘||chr(10)||vMSG );
When UTL_FILE.INVALID_FILENAME then vMSG := sqlerrm; dbms_output.put_line( ‘Otre.: 8 ‘||chr(10)||vMSG );
When UTL_FILE.ACCESS_DENIED then vMSG := sqlerrm; dbms_output.put_line( ‘Otre.: 9 ‘||chr(10)||vMSG );
When UTL_FILE.INVALID_OFFSET then vMSG := sqlerrm; dbms_output.put_line( ‘Otre.: 10 ‘||chr(10)||vMSG );
When UTL_FILE.INVALID_MAXLINESIZE then vMSG := sqlerrm; dbms_output.put_line( ‘Otre.: 11 ‘||chr(10)||vMSG );
When OTHERS then
DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM,1,255));
RAISE; */
End;
END DocProtesto;utl_file.fclose(in_file);
else
vMSG := ‘Não foi possível montar o nome do arquivo XML.’;
end if;
pMSG := vMSG;END PRC_XML_BUILDER_v1p3;