как динамически генерировать несколько текстовых файлов в Oracle - PullRequest
0 голосов
/ 11 мая 2018

У меня есть таблица t1, которая содержит два столбца, т.е. company и employee name. Я хочу создать текстовые файлы для каждой компании, и файлы должны содержать сотрудников, работающих в этих компаниях.

Любые предложения о том, как это сделать, будут оценены.

CREATE TABLE T1(COMPANY VARCHAR2(10) , ENAME VARCHAR2(100));

INSERT INTO T1 
SELECT 'A' , 'SSS' FROM DUAL
UNION
SELECT 'B' , 'AAA' FROM DUAL
UNION 
SELECT 'C' , 'FFF' FROM DUAL
UNION 
SELECT 'A' , 'KKK' FROM DUAL
UNION 
SELECT 'B' , 'LLL' FROM DUAL
UNION 
SELECT 'C' , 'EEE' FROM DUAL
UNION 
SELECT 'A' , 'UUU' FROM DUAL
UNION 
SELECT 'B' , 'WWW' FROM DUAL
UNION 
SELECT 'C' , 'TTT' FROM DUAL
UNION 
SELECT 'A' , 'MMM' FROM DUAL;

commit;

Ожидаемые результаты:

A.txt
KKK
MMM
SSS
UUU

B.txt
AAA
LLL
WWW

C.txt
EEE
FFF
TTT

Спасибо

Спасибо, я попробовал то, что вы предложили, и я получаю данные на v_out.sql, но файлы не генерируются. я получаю сообщение об ошибке в конце v_out.sql

ошибка

 Elapsed: 00:00:00.02
not spooling currently
SP2-0734: unknown command beginning "Elapsed: 0..." - rest of line ignored.

запрос

 set termout off
    set echo off
    set feedback off
    spool v_out.sql
    select * from
    (
    with files as ( select distinct company from t1 )
      select
      'set termout off '||chr(10)|| 
      'set serveroutput on '||chr(10)||
      'set echo off '||chr(10)||
      'set feedback off '||chr(10)||
      'spool '||company||'.dat'||chr(10)||
      'select * from t1 where company = '''||company||''';'||chr(10)||
      'spool off'
      from files
      );
     /
     spool off
    @v_out.sql;

что-то не так в этом запросе?

1 Ответ

0 голосов
/ 12 мая 2018

Настройка ваших тестовых данных:

SQL> CREATE TABLE T1(COMPANY VARCHAR2(10) , ENAME VARCHAR2(100));

Table created.

SQL>
SQL> INSERT INTO T1
  2  SELECT 'A' , 'SSS' FROM DUAL
  3  UNION
  4  SELECT 'B' , 'AAA' FROM DUAL
  5  UNION
  6  SELECT 'C' , 'FFF' FROM DUAL
  7  UNION
  8  SELECT 'A' , 'KKK' FROM DUAL
  9  UNION
 10  SELECT 'B' , 'LLL' FROM DUAL
 11  UNION
 12  SELECT 'C' , 'EEE' FROM DUAL
 13  UNION
 14  SELECT 'A' , 'UUU' FROM DUAL
 15  UNION
 16  SELECT 'B' , 'WWW' FROM DUAL
 17  UNION
 18  SELECT 'C' , 'TTT' FROM DUAL
 19  UNION
 20  SELECT 'A' , 'MMM' FROM DUAL;

10 rows created.

SQL>
SQL> commit;

Commit complete.


SQL>

Вот запрос:

SQL> with files as ( select distinct company from t1 )
  2  select
  3   'spool '||company||'.dat'||chr(10)||
  4   'select * from t1 where company = '''||company||''';'||chr(10)||
  5   'spool off'
  6  from files;

'SPOOL'||COMPANY||'.DAT'||CHR(10)||'SELECT*FROMT1WHERECOMPANY='''||COMPANY||'
-----------------------------------------------------------------------------
spool A.dat
select * from t1 where company = 'A';
spool off

spool B.dat
select * from t1 where company = 'B';
spool off

spool C.dat
select * from t1 where company = 'C';
spool off

Теперь вы просто помещаете вывод THAT в файл, а затем запускаете этот файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...