2009-06-18 6 views

Répondre

1

Salut l'utilitaire Oracle UTL_FILE serait bon d'utiliser, voici 2 procédures que j'utilise
1 Supprimer le fichier
2. Créer un fichier CSV à partir de n'importe quelle chaîne de requête transmise en tant que paramètre


CREATE OR REPLACE PROCEDURE delete_external_file (p_directory in VARCHAR2 
                ,p_filename in VARCHAR2) 
AS 

BEGIN 

    utl_file.fremove(p_directory
,p_filename); EXCEPTION when others then raise; END;

create or replace PROCEDURE dump_table_to_csv(p_query in varchar2 
              , p_dir in varchar2 
              , p_filename in varchar2) 
is 

    l_output  utl_file.file_type; 

    l_theCursor  integer default dbms_sql.open_cursor; 

    l_columnValue varchar2(2000); 

    l_status  integer; 

    l_colCnt  number := 0; 

    l_separator  varchar2(1); 

    l_descTbl  dbms_sql.desc_tab; 

begin 

    l_output := utl_file.fopen(p_dir, p_filename, 'w',32760); 
    execute immediate 'alter session set nls_date_format=''dd-mon-yyyy hh24:mi:ss'' '; 
    dbms_sql.parse( l_theCursor, p_query, dbms_sql.native); 
    dbms_sql.describe_columns(l_theCursor, l_colCnt, l_descTbl); 
    for i in 1 .. l_colCnt loop 
    utl_file.put(l_output, l_separator || '"' || l_descTbl(i).col_name || '"'); 
    dbms_sql.define_column(l_theCursor, i, l_columnValue, 4000); 
    l_separator := ','; 
    end loop; 
    utl_file.new_line(l_output); 
    l_status := dbms_sql.execute(l_theCursor); 
    while (dbms_sql.fetch_rows(l_theCursor) > 0) loop 
     l_separator := ''; 
     for i in 1 .. l_colCnt loop 
       dbms_sql.column_value(l_theCursor, i, l_columnValue); 
       utl_file.put(l_output, l_separator||'"'|| l_columnValue||'"'); 
       l_separator := ','; 
      end loop; 
      utl_file.new_line(l_output); 
     end loop; 
    dbms_sql.close_cursor(l_theCursor); 
    utl_file.fclose(l_output); 
    execute immediate 'alter session set nls_date_format=''dd-MON-yy'' '; 
exception 

     when others then 

      execute immediate 'alter session set nls_date_format=''dd-MON-yy'' '; 
     raise; 
end; 
Questions connexes