Может ли тело помочь мне ABT процедуры для модификации файла CSV из содержимого таблицы - PullRequest
0 голосов
/ 18 июня 2009


Привет, я застрял в написании процедуры, которая должна обновить файл CSV (или удалить старый файл CSV и создать новый файл CSV с тем же именем и данными в таблице) на основе содержимого таблицы ..
Спасибо в Adv

1 Ответ

1 голос
/ 18 июня 2009

Привет, утилита Oracle UTL_FILE была бы полезна, вот две процедуры, которые я использую
1. Удалить файл
2. Создать файл CSV из любой строки запроса, переданной в качестве параметра


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

BEGIN

  utl_file.fremove(p_directory<br/>,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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...