Pular para o conteúdo

Fóruns SQL e PL/SQL Duvida – String com caracteres Duvida – String com caracteres

#99257
Doug
Participante

    CREATE OR REPLACE PROCEDURE ESSAKAI.PRC_XML_BUILDER_v1p3(pCD_XML in number,
    pNM_ACAO in varchar2,
    pMSG out varchar2) IS

    vXML_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;