IMO ваш первый подход (написание заголовка с использованием UTL_FILE.PUT_LINE перед выводом данных .csv) кажется разумным.
Однако ... если вас это не устраивает, вы можете попытаться изменить курсор навернуть заголовок перед данными, указав UNION'ом:
SELECT 'Y' AS IS_TITLE,
'TGTBSP,MAX GB,ALLOC GB,USED GB,PERC DB,PERC USED' AS TARGET_TABLESPACE,
NULL AS MAX_ALLOC_GB,
NULL AS ALLOC_GB
NULL AS USED_GB,
NULL AS PERC_GB,
NULL AS PERC_USED
FROM DUAL
UNION ALL
select 'N' AS IS_TITLE,
TARGET_TABLESPACE,
MAX_ALLOC_GB,
ALLOC_GB,
USED_GB,
PERC_USED
from ESTIMATE
where link = v_link_name
Теперь, когда вы получаете строку с IS_TITLE = 'Y'
, вы выводите только столбец TARGET_TABLESPACE
, который содержит ваши заголовки.Если IS_TITLE = 'N'
вы выводите все поля данных с соответствующим форматированием, запятыми и т. Д.
Удачи.
РЕДАКТИРОВАТЬ
На основе приведенного ниже комментария добавьте следующеесразу после UTL_FILE.FOPEN
вызова:
UTL_FILE.PUT_LINE(file_handle, 'G''day. This output shows blah blah blah...');
UTL_FILE.PUT_LINE(file_handle, ' ');
Дайте этому шанс.
Всего наилучшего.