#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 для создания такого файла.