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