2016-08-26 2 views
1

У меня есть пакетный скрипт, который запускает команду SQL * Plus, и я наматываю вывод в файл CSV. Все выходы имеют только один столбец «count». Есть ли способ добавить текст к результатам?sqlplus и spool options

"The_current_valueOf Query1" "Count1" 
"The_current_valueOf Query2" "Count2" 

Любая помощь/совет будет принимаем во внимание.

set colsep , 
set pagesize 0 
set trimspool on 
set headsep off 
set Newpage none 

spool D:\TRHMIBS\TRH\TRHStats.csv 
select count(*) from host.ufm where insert_time between trunc(sysdate) and sysdate 
/
spool D:\TRHMIBS\TRH\TRHStats.csv APPEND 

select count(*) from host.amendment where insert_time between trunc(sysdate) and sysdate and msg_source = 'AUDIT' 
/
spool D:\TRHMIBS\TRH\TRHStats.csv APPEND 
select count(*) from host.ufm_amendment where insert_time between trunc(sysdate) and sysdate and msg_source = 'DAS' and ext_token is null 
/
spool off; 

exit; 

ответ

2

Вы можете просто выбрать сообщение в виде жесткого кодированного литерала. Например:

spool D:\TRHMIBS\TRH\TRHStats.csv 
SELECT 'The_current_valueOf Query1:', COUNT(*) 
FROM host.ufm 
WHERE insert_time BETWEEN TRUNC(sysdate) AND sysdate 
/
1

Это не имеет никакого отношения к буферизации. Ваша вторая и третья команды spool являются избыточными - все буферизуется в открытый файл, пока вы не отключите его. Но это побочный вопрос.

Вы можете добавить еще один столбец в свой вывод с выражением столбца, который может быть строковым литералом. Таким образом, вы можете изменить первый запрос на:

select 'The_current_valueOf Query1', count(*) 
from host.ufm 
where insert_time between trunc(sysdate) and sysdate 

а затем выполните то же самое для двух других запросов.

Так как вы хотите его как CSV вы можете оставить colsep в покое и иметь один столбец с запятой, встроенной в него, что можно сделать с помощью конкатенации:

select 'The_current_valueOf Query1,' || count(*) 
from host.ufm 
where insert_time between trunc(sysdate) and sysdate 

А, а не работают три отдельных запросов вы мог объединить их вместе; не экономит на обработке, а означает, что выход все вместе.

select 'The_current_valueOf Query1,' || count(*) 
from host.ufm 
where insert_time between trunc(sysdate) and sysdate 
union all 
select 'The_current_valueOf Query1,' || count(*) 
from host.amendment 
where insert_time between trunc(sysdate) and sysdate 
union all 
... 
Смежные вопросы