Изменить выходной формат SQL-запроса Oracle - PullRequest
2 голосов
/ 17 сентября 2011

Я хочу изменить формат вывода моего скрипта Oracle OCL.Предположим, у меня есть скрипт с именем active_user.sh, внутри которого я просто пишу свой запрос.Теперь проблема заключается в том, что, когда я разбиваю скрипт, вывод выводится без заголовка и отображаются только значения.

Сценарий:

export CONNECT_STRING=$1
if [ x$2 == x ]
then echo First Parameter is connection string to DB and Second parameter have to be ORACLE_HOME variable && exit 1
else export ORACLE_HOME=$2
fi
export ORACLE_SID=OMEGA #fake
export PATH=$ORACLE_HOME/bin:$PATH
RAND=$$
sqlplus -s /nolog <<-EOF > /tmp/${RAND}.sql_out.temp

connect $CONNECT_STRING
set HEADING OFF
set PAGESIZE 0
set linesize 120
col metric_name format a40
col value format 999999990.9999
select count(*) from v\$session where username is not null  and status='ACTIVE';
EOF

cat /tmp/${RAND}.sql_out.temp

И это команда для запуска сценария, и вывод:

[root@oracle-test scripts]# ./active_users.sh "ora/orapass123@mydb" /opt/oracle/instantclient_11_2
         1

    23.0000

Но когда я запускаю запрос в sqlplusон возвращает что-то вроде этого:

COUNT(*)
----------
1

1 Ответ

5 голосов
/ 17 сентября 2011

Если вы хотите напечатать заголовки столбцов, вы должны установить set HEADING ON.

Вы также можете использовать команду SPOOL, что-то вроде этого (извините, я не могу сейчас проверить):

spool /tmp/${RAND}.sql_out.temp
set heading on
set pagesize 1000
set tab on
set linesize 120 wrap off
column "yourcount" format a40
col metric_name format a40
col value format 999999990.9999
select count(*) yourcount from v\$session where username is not null  and status='ACTIVE';
...