Мне нужно вывести файл с использованием ORACLE sql в следующем формате
HEADR,xx,20170130145001
DTROW,1357924680135,9876543210
DTROW,2468013579246,1234567890
TRAIL,3
Я создал следующий код. Что почти работает, но проблема в том, что запись трейлера имеет только два поля. Чтобы заставить работать профсоюз, я добавил null в field3. Но,
это означает, что при экспорте вывод выглядит так. Заголовок и деталь имеют 3 поля, трейлер имеет только 2.
При выполнении запроса получим следующее
FIELD1 FIELD2 FIELD3
HEADR XX 20181108145437
DTROW 1357924680135 9876543210
DTROW 2468013579246 1234567890
TRAIL 3 null
При экспорте в CSV-файл получите следующее
HEADR,XX,20181108092508
DTROW,1357924680135,9876543210
DTROW,2468013579246,1234567890
TRAIL,3, <<===== I don't want to have , after 2
Это код, который я использовал:
WITH main_query AS
(
SELECT 'DTROW' AS field1
, ACCT AS field2
, ID AS field3
, ROW_NUMBER () OVER (ORDER BY ACCT) AS r_num
FROM MYTABLE
)
, union_data AS
(
-- Header line
SELECT 'HEADR' AS field1
, 'XX' AS field2
, TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') AS field3
, 0 AS r_num
FROM dual
--
UNION ALL
--
-- Main query
SELECT *
FROM main_query
--
UNION ALL
--
-- Trailer line
SELECT 'TRAIL' AS field1
, TO_CHAR(COUNT(*) + 1 ) AS field2
, NULL AS field3
, NULL AS r_num
FROM main_query
)
SELECT field1
, field2
, field3
FROM union_data
ORDER BY r_num NULLS LAST
;
Как мне обойти эту проблему. Экспортированный CSV-файл будет иметь в конце
записи трейлера, потому что поле 3 пустое.
Мне не нужна запятая, поскольку запись в трейлере должна содержать только 2 поля.
Поэтому при экспорте в csv должен выглядеть следующим образом.
TRAIL,3
не так
TRAIL,3,
SQL-код будет запущен в Bi Publisher и выведет CSV-файл. Поэтому я не могу потом редактировать файл.