OSコマンドとSQLPLUSの統合
SQLPLUSをOSコマンドで強化できる!
SQLPLUSのSQL機能はパワーフルだが、OSのgrepやawkなど便利な機能を使いたい、
更にperlと組み合わせたりしたいことはしないか?
osqlfuseのOSのhost統合コマンドはこの機能を実現した。
具体的な仕組みは、
sqlplusの使うまま、OSコマンド
sqlplus/sqlのコマンドの出力をOSのパイプ入力とし、
出力をsqlplusのターミナルで表示する。
また、spool以外sqlplusの環境をほとんど影響しない。
Example:
-- 従来の表示 01:37:09 SYS(PROD)> desc dual Name Null? Type ----------------------------------------------------- -------- ------------------------------------ DUMMY VARCHAR2(1) -- @host2 "desc dual" "grep D" 利用 -- つまり desc dual の出力を grep D の入力として処理する 01:36:54 SYS(PROD)> 01:36:54 SYS(PROD)> @host2 "desc dual" "grep D" 01:37:09 SYS(PROD)> set echo off DUMMY VARCHAR2(1) 01:37:09 SYS(PROD)> -- @host2 "desc dual" "head -n 2" 利用 -- つまり desc dual の出力を head -n 2 の入力として処理する 01:50:06 SYS(PROD)> 01:50:06 SYS(PROD)> @host2 "desc dual" "head -n 2" 01:50:31 SYS(PROD)> set echo off Name Null? Type ----------------------------------------------------- -------- ------------------------------------ 01:50:31 SYS(PROD)>
host.sql
set echo off set termout off set verify off set time off -- host.sql -- osqlfuse package FUS component -- @author f.yang -- all rights reserved -- http://oracle-abc.wikidot.com -- -- @usage -- from sqlplus -- SQL> @host "sql/sqlplus command" "os command" -- from os shell -- echo @host '"desc dual"' '"grep D"' | sqlplus -S / as sysdba -- -- @example -- from sqlplus -- SQL> @host "desc dual" "grep DUMMY" -- DUMMY VARCHAR2(1) -- from os shell -- echo @host '"desc dual"' '"grep D"' | sqlplus -S / as sysdba -- DUMMY VARCHAR2(1) spool off spool '.osqlfuse.host.cmd.tmp' prompt &1 spool off spool '.osqlfuse.host.out.tmp' @.osqlfuse.host.cmd.tmp spool off host cat .osqlfuse.host.out.tmp | &2 set verify on set termout on set time on set echo on
minimal implementation
-- h.sql -- osqlfuse. all rights reserved. set echo off set termout off spool off spool '.h.cmd' prompt &1 spool off spool '.h.out' @.h.cmd spool off host cat .h.out | &2 set termout on set echo on
hosttmp.sql
host cat .osqlfuse.host.out.tmp
注意事項!:
- コマンドのエラー
SQL/SQLPLUSコマンドにエラーがある場合、エラーメッセージは@hosttmpコマンドで確認できる。
OSコマンドにエラーがある場合、直接@hostの出力に出力される
- spoolへの影響
オラクルの変数機能にいろいろと制限があるため、spoolを活用せざるえなかった。
ということで、従来のsqlplusにspoolが使われた場合、このスクリプト実行するとoffになる。