Translate

sexta-feira, 9 de maio de 2014

Gerar Arquivo CSV

Rotina para gerar arquivo CSV (Excel), permite abrir diretamente ou salvar na máquina.

  procedure prc_gera_csv ( p_parametro1    in varchar2
                         ,p_parametro2    in varchar2 ) is           

    rawBUFFER           RAW(32767);
    iTAMANHO            BINARY_INTEGER;
    v_blob              BLOB;  
    vSTRING             VARCHAR2(32767);
    v_nome_arq          VARCHAR2(1000);
    v_sql               VARCHAR2(2000);    
    v_campo_1           teste.v_campo_1%type;
    v_campo_2           teste.v_campo_2%type; 
    v_campo_3           teste.v_campo_3%type;
    v_cursor            SYS_REFCURSOR;
   
    
  begin  
     
    DBMS_LOB.createtemporary(v_blob,FALSE);  
        
    -- Cabecalho da planilha    
    rawBUFFER := UTL_RAW.cast_to_raw('CAMPO 1;' ||
                                     'CAMPO 2;' ||
                                     'CAMPO 3;' ||                                                                        
                                     CHR(13) || CHR(10));    
                                     
    iTAMANHO := UTL_RAW.length(rawBUFFER);
    DBMS_LOB.writeappend(v_blob, iTAMANHO, rawBUFFER);
    
    v_sql:= 'select campo_1                     
                   ,campo_2                     
                   ,campo_3       
             from   teste                  
             where  ...';  
    
    if p_parametro1 <> 'X' then
      v_sql := v_sql || ' and..... = ''' || p_parametro1 ||'''';
    end if;                 

    if p_parametro2 <> 'X' then
      v_sql := v_sql || ' and..... = ''' || p_parametro2 ||'''';
    end if;      
    
    v_sql:=  v_sql||' order by ...... ';   

    open v_cursor for v_sql;    
    loop     
      
      fetch v_cursor into  v_campo_1
                          ,v_campo_2
                          ,v_campo_3;
                         
                           
      exit when v_cursor%notfound;   
        
      vSTRING :=  v_campo_1  ||';' ||
                  v_campo_2  ||';' ||
                  v_campo_3  ||';' ||                                     
                  chr(13)||chr(10);

      rawBUFFER := UTL_RAW.cast_to_raw(vSTRING);
      iTAMANHO  := UTL_RAW.length(rawBUFFER);
      DBMS_LOB.writeappend(v_blob, iTAMANHO, rawBUFFER);
        
    end loop;    
    
    v_nome_arq := 'ARQUIVO_XXX';

    OWA_UTIL.mime_header('text/*',FALSE);
    htp.p('Content-Disposition: attachment; filename="'||v_nome_arq||'.csv"');

    htp.p('Content-length: ' || dbms_lob.getlength(v_blob));
    OWA_UTIL.http_header_close;

    WPG_DOCLOAD.download_file(v_blob);
    DBMS_LOB.freetemporary(v_blob);  
    RETURN;            

  end prc_gera_csv;  

Nenhum comentário:

Postar um comentário