rlwrap を使ってコンソールから入力された SQL が SQL*Plus に渡される前に書き変える

前提条件

  • cygwin がインストールされていること。
  • SQL*Plus がインストールされていること。

rlwrap をインストールする

% tar xfvz rlwrap-0.37.tar.gz
% cd rlwrap-0.37
% ./configure
% make
% make install

フィルタを作成する。

  • /usr/local/share/rlwrap/filters/sql_filter
#!/usr/bin/perl
use lib $ENV{RLWRAP_FILTERDIR};
use RlwrapFilter;
$filter = new RlwrapFilter;
$filter-> input_handler(sub {s/:(\d+)/:bnd_$1/g; $_});
$filter-> run;

実行してみる

% export RLWRAP_FILTERDIR=/usr/local/share/rlwrap/filters
% /usr/local/bin/rlwrap -z sql_filter ./sqlplus scott/tiger@192.168.56.101:1521/orcl
SQL> variable bnd_1 number
SQL> execute :bnd_1 := 1

PL/SQL procedure successfully completed.

SQL> select :bnd_1 from dual;

    :BND_1
----------
         1

SQL> exit