Tanel Poderさんの TPT Script
つい先日偶然以下の記事を読んで驚きました。もう随分昔の記事ですが、、、
https://cosol.jp/techdb/2013/12/sqlplus_-_prsql_from_tanel_poders_tpt_scripts/
PostgreSQLやMySQLでは普通にできる事だったのですが、SQL*PlusでもSELECT結果の縦表示が実現できました。ただ、NATIVEの機能ではなく、Tanel Poderさんという方(有名な方らしいですが、恥ずかしながら私は知りませんでした)が作成したスクリプトで実現できます。
以下ページからダウンロード(tpt-oracle-master.zip)し、展開したフォルダをSQLPATHで指定しておけばSQL*Plusで利用できるようになりますが(Windowsの場合)、利用する前に、init.sqlを開いて利用環境に合わせて適宜コメント行を操作してください。
注意点として、利用のたびにtpt-oracle-master/tmp配下に一時ファイルが作成され残ったままになるので適当なタイミングでお掃除が必要です。(Windows版では.tmpファイルを消しに行ってるけど消せない不具合がありそう。私はpr.sql 最終行(host &_delete &_pr_tmpfile)はコメントアウトしました。(今度時間見つけて修正したいとは思ってます)
https://github.com/tanelpoder/tpt-oracle
使い方は簡単で、目的のSELECTを実行した後、@prと打ち込むだけで縦表示してくれます
D:\>sqlplus sooni/sooni@vm102/ora19.box
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。
USERNAME INST_NAME HOST_NAME I# SID SERIAL# VERSION STARTED SPID OPID CPID SADDR PADDR
-------------------- -------------------- ------------------------- --- ----- -------- ---------- -------- ---------- ----- --------------- ---------------- ----------------
SOONI ora19-ora19 vm102.box 1 53 304 19.0.0.0.0 20221221 7094 42 6312:18556 00000000725EA570 00000000723D42F8
-ne '\033]0;sooni@ora19-ora19 53[7094]\007'
SQL>
SQL> select * from v$session where sid =75;
-- 途中省略
7 0000000000000007 0 00 0 00 2723168908 6 Idle 0 5 WAITING 4571596 -1 0 SYS$BACKGROUND DISABLED FALSE FALSE FIRST EXEC 0 00000000723E18B8 2
0 0 DISABLED 0
FALSE
SQL>
-- このようにv$sessionを*なんかで表示したら
--すごーく見辛い事になりますが、、、一度表示したあと、
-- pr.sqlを動作させると以下の通り縦表示してくれます
--
SQL> @pr
==============================
SADDR : 0000000072621360
SID : 75
SERIAL# : 6326
AUDSID : 0
PADDR : 00000000723E18B8
USER# : 0
USERNAME :
COMMAND : 0
OWNERID : 2147483644
TADDR :
LOCKWAIT :
STATUS : ACTIVE
SERVER : DEDICATED
SCHEMA# : 0
SCHEMANAME : SYS
OSUSER : oracle
PROCESS : 2627
MACHINE : vm102.box
PORT : 0
TERMINAL : UNKNOWN
PROGRAM : oracle@vm102.box (W007)
TYPE : BACKGROUND
SQL_ADDRESS : 00
SQL_HASH_VALUE : 0
SQL_ID :
SQL_CHILD_NUMBER :
SQL_EXEC_START :
SQL_EXEC_ID :
PREV_SQL_ADDR : 0000000066853618
PREV_HASH_VALUE : 3723762111
PREV_SQL_ID : 9x2prazfz86dz
PREV_CHILD_NUMBER : 0
PREV_EXEC_START : 2023-12-21 21:01:49
PREV_EXEC_ID : 16777252
PLSQL_ENTRY_OBJECT_ID :
PLSQL_ENTRY_SUBPROGRAM_ID :
PLSQL_OBJECT_ID :
PLSQL_SUBPROGRAM_ID :
MODULE : KTSJ
MODULE_HASH : 4150380559
ACTION : KTSJ Slave
ACTION_HASH : 796006397
CLIENT_INFO :
FIXED_TABLE_SEQUENCE : 11389
ROW_WAIT_OBJ# : -1
ROW_WAIT_FILE# : 0
ROW_WAIT_BLOCK# : 0
ROW_WAIT_ROW# : 0
TOP_LEVEL_CALL# : 59
LOGON_TIME : 2022-12-21 20:52:23
LAST_CALL_ET : 25013
PDML_ENABLED : NO
FAILOVER_TYPE : NONE
FAILOVER_METHOD : NONE
FAILED_OVER : NO
RESOURCE_CONSUMER_GROUP : OTHER_GROUPS
PDML_STATUS : DISABLED
PDDL_STATUS : ENABLED
PQ_STATUS : ENABLED
CURRENT_QUEUE_DURATION : 0
CLIENT_IDENTIFIER :
BLOCKING_SESSION_STATUS : NO HOLDER
BLOCKING_INSTANCE :
BLOCKING_SESSION :
FINAL_BLOCKING_SESSION_STATUS : NO HOLDER
FINAL_BLOCKING_INSTANCE :
FINAL_BLOCKING_SESSION :
SEQ# : 7675
EVENT# : 330
EVENT : Space Manager: slave idle wait
P1TEXT : Slave ID
P1 : 7
P1RAW : 0000000000000007
P2TEXT :
P2 : 0
P2RAW : 00
P3TEXT :
P3 : 0
P3RAW : 00
WAIT_CLASS_ID : 2723168908
WAIT_CLASS# : 6
WAIT_CLASS : Idle
WAIT_TIME : 0
SECONDS_IN_WAIT : 0
STATE : WAITING
WAIT_TIME_MICRO : 461781
TIME_REMAINING_MICRO : -1
TIME_SINCE_LAST_WAIT_MICRO : 0
SERVICE_NAME : SYS$BACKGROUND
SQL_TRACE : DISABLED
SQL_TRACE_WAITS : FALSE
SQL_TRACE_BINDS : FALSE
SQL_TRACE_PLAN_STATS : FIRST EXEC
SESSION_EDITION_ID : 0
CREATOR_ADDR : 00000000723E18B8
CREATOR_SERIAL# : 2
ECID :
SQL_TRANSLATION_PROFILE_ID : 0
PGA_TUNABLE_MEM : 0
SHARD_DDL_STATUS : DISABLED
CON_ID : 0
EXTERNAL_NAME :
PLSQL_DEBUGGER_CONNECTED : FALSE
PL/SQLプロシージャが正常に完了しました。
SQL>