Пользовательский формат файла с использованием Spool SQLPLUS

#sql #oracle #sqlplus #spool

Вопрос:

Я пытаюсь экспортировать данные из нескольких таблиц в пользовательский формат файла с разделителями каналов. Я могу создать файл с разделителями каналов из одной таблицы, но не могу получить требуемый пользовательский формат.

Вот такой формат:

 HD|034567|24052021092630|1.0
3|||||0|0|12345678909|2|SDATA|DNAME||||TBD|||M|||||||||||||||||
3|||||0|0|12345678910|1|SDATA|DNAME||||TBD|||F|||||||||||||||||
3|||||0|0|12345678911|5|SDATA|DNAME||||TBD|||M|||||||||||||||||
FT|000000003
 

Где first row это начинается с HD отдельной таблицы, последняя жестко закодирована, а данные в строках посередине взяты из основной таблицы. Как я могу сгенерировать этот файл формата .dat с помощью SPOOL SQL*PLUS или с помощью любой другой утилиты, более подходящей для сценария.

Спасибо

Ответ №1:

Прошло 5 часов с тех пор, как вы опубликовали вопрос, а ответов все еще нет. Может быть, это означает, что вы не можете сделать это так, как планировали.

«Тривиальным» решением было бы использовать 3 SELECT оператора с a UNION ALL , например

 select 'HD', col1, col2, col3 from table_1
UNION ALL
select number of columns from table_2
UNION ALL
select 'FT', 000000003 from dual
 

но это не сработает, потому что

  • количество столбцов не совпадает
  • типы данных, вероятно, тоже не совпадают

Вы можете выполнить 3 отдельных select оператора, но между ними будут пустые строки.

Поэтому рассмотрите возможность переключения на PL/SQL и пакет UTL_FILE для создания такого файла.