Procedure - Pessoal preciso de ajuda

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

Como posso fazer para que o resultado dessa consulta seja exportado para o formato *csv?
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

você está usando qual ferramenta pra consulta? SQLPlus? PL SQL Developer, ... ?

[]'s
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

SQL DEVELOPER.
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Quando você executa uma query no developer aparece um grid na parte de baixo da janela, nesse grid tem o resultado do seu select, se você clicar no resultado com o botao direito do mouse aparece uma janela, entre as opcoes que ela tem existe a "Export", e dentro de export tem a opcao de salvar como csv.

[]'s
luizinho
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Sex, 23 Nov 2007 11:08 am
Localização: RJ

tem uma opção no PL SQL developer : Export query results .
Não sei a versão do seu, mas aqui no meu fica em cima do resultado da query onde tem uma serie de botões.
ai você escolhe a opção CSV file
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

OK...Isso já faço - porém gostaria que tivesse uma job que enviasse o arquivo nesse formato para uma pasta /backup/cpmf...
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

Automaticamente...
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

E ai Mario, beleza??

Pra gerar um arquivo automaticamente no servidor você pode criar um job, e programa-lo pra ser executado dentro do intervalo q você desejar (5 min, 1 hora, 1 dia)...

Esse job poderá chamar uma procedure, q vai ser a procedure responsavel pela criacao do arquivo no servidor.. de uma procurada aqui no fórum sobre UTL_FILE, entre os parametros que o utl_file possui tem um que indica qual a pasta que ele vai salvar o arquivo...

O q ficou faltando foi falar sobre o CSV em si, no caso o csv nada mais é do um unico registro informado em uma linha e esse registro possui um delimitador, q normalmente é utilizado o ";".. essa montagem fica fácil pois é só você concatenar seus registros e entre eles colocar um ";".

Voltando na gravacao do arquivo, dentro do loop dos seus registros, depois que você montar sua linha, você deverá utilizar o UTL_FILE.PUT_LINE pra gravar a linha no seu arquivo..

se tiver alguma dúvida é só falar.

[]'s
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

Poderia me exemplificar?
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

Esse é o script pode me exemplificar como salvar esse arquivo em uma pasta?

Selecionar tudo

CREATE OR REPLACE PROCEDURE prc_emprestimo_gf (
   prc_con_num_est      OUT   NUMBER, 
   prc_principal_pago   OUT   NUMBER, 
   prc_juros_pago       OUT   NUMBER, 
   prc_mora_paga        OUT   NUMBER, 
   prc_iof_pago         OUT   NUMBER, 
   prc_multa_paga       OUT   NUMBER 
) 
IS 
   v_con_num_est      NUMBER (8); 
   v_principal_pago   NUMBER (14, 4); 
   v_juros_pago       NUMBER (14, 4); 
   v_mora_paga        NUMBER (14, 4); 
   v_iof_pago         NUMBER (14, 4); 
   v_multa_paga       NUMBER (14, 4); 
BEGIN 
   SELECT   c.con_num_est, TO_DATE (t.pgt_dat, 'DD-MM-YYYY'), 
            SUM (t.ppcvalpriantpgt - t.ppcvalpripospgt), 
            SUM (t.ppcvaljurantpgt - t.ppcvaljurpospgt), 
            SUM (t.ppcvalmorantpgt - t.ppcvalmorpospgt), 
            SUM (t.ppcvaliofantpgt - t.ppcvaliofpospgt), SUM 
                                                           (  t.ppcvalmulantpgt 
                                                            - t.ppcvalmulpospgt 
                                                           ) 
       INTO v_con_num_est, v_principal_pago, 
            v_juros_pago, 
            v_mora_paga, 
            v_iof_pago, 
            v_multa_paga 
       FROM emptblppc t, tb_con c, tb_pgt p 
      WHERE t.con_num = c.con_num 
        AND t.ppcdthalt = c.con_dat_alt 
        AND t.con_num = p.con_num 
        AND t.ppcdthalt = p.pgt_dat_alt 
        AND t.pgt_dat = p.pgt_dat 
        AND t.ppcdthalt = '01 jan 1960' 
        AND TO_CHAR (p.DATA, 'DD-MM-YYYY') = '23-11-2007' 
   GROUP BY c.con_num_est, TO_DATE (t.pgt_dat, 'DD-MM-YYYY'); 

   prc_con_num_est := nvl(v_con_num_est,0); 
   prc_principal_pago := nvl(v_principal_pago,0); 
   prc_juros_pago := nvl(v_juros_pago,0); 
   prc_mora_paga := nvl(v_mora_paga,0); 
   prc_iof_pago := nvl(v_iof_pago,0); 
   prc_multa_paga := nvl(v_multa_paga,0); 
END;
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Amigo, segue um exemplo do q você precisa. Se precisar de mais exemplos da uma pesquisada aqui no fórum, você vai encontrar bastante coisa sobre UTL_FILE.

Selecionar tudo

/* Formatted on 2007/12/07 08:14 (Formatter Plus v4.8.7) */
CREATE OR REPLACE PROCEDURE prc_emprestimo_gf (
   prc_con_num_est      OUT   NUMBER,
   prc_principal_pago   OUT   NUMBER,
   prc_juros_pago       OUT   NUMBER,
   prc_mora_paga        OUT   NUMBER,
   prc_iof_pago         OUT   NUMBER,
   prc_multa_paga       OUT   NUMBER
)
IS
   v_con_num_est      NUMBER (14, 4);
   v_principal_pago   NUMBER (14, 4);
   v_juros_pago       NUMBER (14, 4);
   v_mora_paga        NUMBER (14, 4);
   v_iof_pago         NUMBER (14, 4);
   v_multa_paga       NUMBER (14, 4);
   v_linha            VARCHAR2 (2000)    := '';
   v_arquivo          UTL_FILE.file_type;
BEGIN
   SELECT   c.con_num_est, TO_DATE (t.pgt_dat, 'DD-MM-YYYY'),
            SUM (t.ppcvalpriantpgt - t.ppcvalpripospgt),
            SUM (t.ppcvaljurantpgt - t.ppcvaljurpospgt),
            SUM (t.ppcvalmorantpgt - t.ppcvalmorpospgt),
            SUM (t.ppcvaliofantpgt - t.ppcvaliofpospgt), SUM
                                                           (  t.ppcvalmulantpgt
                                                            - t.ppcvalmulpospgt
                                                           )
       INTO v_con_num_est, v_principal_pago,
            v_juros_pago,
            v_mora_paga,
            v_iof_pago,
            v_multa_paga
       FROM emptblppc t, tb_con c, tb_pgt p
      WHERE t.con_num = c.con_num
        AND t.ppcdthalt = c.con_dat_alt
        AND t.con_num = p.con_num
        AND t.ppcdthalt = p.pgt_dat_alt
        AND t.pgt_dat = p.pgt_dat
        AND t.ppcdthalt = '01 jan 1960'
        AND TO_CHAR (p.DATA, 'DD-MM-YYYY') = '23-11-2007'
   GROUP BY c.con_num_est, TO_DATE (t.pgt_dat, 'DD-MM-YYYY');

   v_arquivo := UTL_FILE.fopen ('C:\DIRETORIO\', 'ARQUIVO.TXT', 'W');
   UTL_FILE.put_line (v_arquivo, 'v_con_num_est    : '||NVL (v_con_num_est, 0));
   UTL_FILE.put_line (v_arquivo, 'v_principal_pago : '||NVL (v_principal_pago, 0));
   UTL_FILE.put_line (v_arquivo, 'v_juros_pago     : '||NVL (v_juros_pago, 0));
   UTL_FILE.put_line (v_arquivo, 'v_mora_paga      : '||NVL (v_mora_paga, 0));
   UTL_FILE.put_line (v_arquivo, 'v_iof_pago       : '||NVL (v_iof_pago, 0));
   UTL_FILE.put_line (v_arquivo, 'v_multa_paga     : '||NVL (v_multa_paga, 0));
   UTL_FILE.fclose (v_arquivo);
END;
[]'s
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes