例えば、9i以下だったらV$SESSION_WAITビューから、10g以上だったらV$SESSIONビューから待機イベント情報を抽出するスクリプトが作りたいんです。PL/SQLを利用せずSQL*Plusで実行可能な一つのスクリプトファイルで作りたければどうしたらいいでしょうか。多い方法があるはずですが次のような簡単なトリックが使えます。
col is_10g new_value __is_10g
col is_9i new_value __is_9i
with v as (
select
to_number(substr(banner,
instr(banner, 'Release ')+8,
instr(banner, '.') - instr(banner, 'Release ')-8)) as version
from v$version where rownum = 1
)
select
case when version >= 10 then '' else '--' end as is_10g,
case when version <= 9 then '' else '--' end as is_9i
from v
;
__is_19g、__is_9i置換変数を利用して次のように手軽に解決します。
select * from (
&__is_10g select event, p1, p2, p3 from v$session
&__is_9i select event, p1, p2, p3 from v$session_wait
)
;
応用したら次のようにバージョン別にコラムまで操作できます。
select
sid
,serial#
&__is_10g ,event
&__is_10g ,p1
from
v$session
;
SQL*Plusの強力さが分かる良い例と言えます。
No comments:
Post a Comment