SQL*Plus sám o sobě nemá implementovánu historii procházení mezi jednotlivými příkazy (výjimkou je poslední vykonaný příkaz, ten lze opětovně vyvolat pomocí „r“+Enter). V operačním systému Windows lze toto celkem dobře provést přes funkční klávesu F7, jak ukazuje následující obrázek. Elegantně lze listovat v historii vykonávaných příkazů.

[English version – SQL*Plus and command history in Linux using rlwrap]

Historie SQL*Plus příkazů - Windows7 cmd.exe

V operačním systému Linux lze toto implementovat doplněním wrapperu pro SQL*Plus v podobě programu rlwrap (program vytvoří prostředníka mezi bashem a prostředím SQL*Plus).

UPDATE 20.08.2010 – Pokud používáte distribuci Ubuntu, lze rlwrap nainstalovat jednoduše přes „sudo aptitude rlwrap install“

Postup instalace je následující:

1. Nejprve stáhneme program rlwrap ze serveru freshmeat – aktuální verze programu. Třeba pomocí wget (url adresa aktuální verze programu se může v průběhu času změnit. Verze na které ukazuji tuto instalaci je 0.37 a název staženého souboru je „rlwrap-0.37.tar.gz“):

oracle@ubuntu-server$ wget http://freshmeat.net/urls/de7d8482e030110354012880805e76fd

2. Rozbalíme stažený soubor

oracle@ubuntu-server:~$ tar zxvf rlwrap-0.37.tar.gz
rlwrap-0.37/
rlwrap-0.37/completions/
rlwrap-0.37/completions/testclient
rlwrap-0.37/completions/coqtop
rlwrap-0.37/doc/
rlwrap-0.37/doc/rlwrap.man.in
rlwrap-0.37/doc/Makefile.am
rlwrap-0.37/doc/Makefile.in
...

3. Přesuneme se do adresáře s programem

oracle@ubuntu-server:~$ cd rlwrap-0.37/

4. A spustíme kompilaci (při kompilaci jsem použil volbu „–prefix=/usr“. Standardně se program instaluje do adresáře /usr/local/bin, já v tomto případě preferuji /usr/bin, proto jsem použil volbu „–prefix=…“)

oracle@ubuntu-server:~/rlwrap-0.37$ ./configure --prefix=/usr && make
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
...

Pokud konfigurační skript skončí chybou:

configure: error:

You need the GNU readline library(ftp://ftp.gnu.org/gnu/readline/ ) to build
this program!

Je nutné buď (a) – stáhnout knihovnu readline z adresy ftp://ftp.gnu.org/gnu/readline/, rozbalit a ručně zkompilovat nebo (b) – jako v mém případě, pokud používáte distribuci Ubuntu (nebo jí podobnou), stačí nainstalovat potřebnou knihovnu pomocí aptitude:

oracle@ubuntu-server:~/rlwrap-0.37$ sudo aptitude install libreadline6-dev

… a poté znovu spustit kompilaci rlwrap:

oracle@ubuntu-server:~/rlwrap-0.37$ ./configure --prefix=/usr && make

5. Pokud je kompilace dokončena bez chyb, stačí už jen program nainstalovat.

oracle@ubuntu-server:~/rlwrap-0.37$ sudo make install
Making install in doc
make[1]: Entering directory `/home/oracle/rlwrap-0.37/doc'
make[2]: Entering directory `/home/oracle/rlwrap-0.37/doc'
make[2]: Nothing to be done for `install-exec-am'.
test -z "/usr/share/man/man1" || /bin/mkdir -p "/usr/share/man/man1"
 /usr/bin/install -c -m 644 rlwrap.1 '/usr/share/man/man1'
make[2]: Leaving directory `/home/oracle/rlwrap-0.37/doc'
make[1]: Leaving directory `/home/oracle/rlwrap-0.37/doc'
Making install in src
make[1]: Entering directory `/home/oracle/rlwrap-0.37/src'
make[2]: Entering directory `/home/oracle/rlwrap-0.37/src'
test -z "/usr/bin" || /bin/mkdir -p "/usr/bin"
  /usr/bin/install -c rlwrap '/usr/bin'
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/home/oracle/rlwrap-0.37/src'
make[1]: Leaving directory `/home/oracle/rlwrap-0.37/src'
Making install in filters
make[1]: Entering directory `/home/oracle/rlwrap-0.37/filters'
make[2]: Entering directory `/home/oracle/rlwrap-0.37/filters'
make[2]: Nothing to be done for `install-exec-am'.
test -z "/usr/share/man/man3" || /bin/mkdir -p "/usr/share/man/man3"
 /usr/bin/install -c -m 644 RlwrapFilter.3pm '/usr/share/man/man3'
make[2]: Leaving directory `/home/oracle/rlwrap-0.37/filters'
make[1]: Leaving directory `/home/oracle/rlwrap-0.37/filters'
make[1]: Entering directory `/home/oracle/rlwrap-0.37'
make[2]: Entering directory `/home/oracle/rlwrap-0.37'
make[2]: Nothing to be done for `install-exec-am'.
test -z "/usr/share/rlwrap" || /bin/mkdir -p "/usr/share/rlwrap"
/bin/mkdir -p '/usr/share/rlwrap/filters'
 /usr/bin/install -c -m 644  filters/README filters/RlwrapFilter.pm filters/RlwrapFilter.3pm filters/count_in_prompt filters/pipeto filters/logger filters/null filters/unbackspace filters/pipeline filters/ftp_filter filters/history_format filters/simple_macro filters/template filters/scrub_prompt filters/paint_prompt filters/censor_passwords filters/listing '/usr/share/rlwrap/filters'
/bin/mkdir -p '/usr/share/rlwrap/completions'
 /usr/bin/install -c -m 644  completions/testclient completions/coqtop '/usr/share/rlwrap/completions'
make  install-data-hook
make[3]: Entering directory `/home/oracle/rlwrap-0.37'
chmod a+x /usr/share/rlwrap/filters/*
make[3]: Leaving directory `/home/oracle/rlwrap-0.37'
make[2]: Leaving directory `/home/oracle/rlwrap-0.37'
make[1]: Leaving directory `/home/oracle/rlwrap-0.37'

6. Nezapomeňte nastavit alias pro program sqlplus

oracle@ubuntu-server:~/rlwrap-0.37$ vi ~/.bashrc

… a přidat řádek:

alias sqlplus='/usr/bin/rlwrap sqlplus'

… jak ukazuje následující obrázek:

Edit .bashrc
Edit .bashrc

Po opětovném přihlášení pod účtem, pod kterým jste byly při kompilaci přihlášeni (a z kterého pouštíte SQL*Plus) byste měli být schopni pomocí šipek „nahoru/dolu“ listovat v historii vykonávaných příkazů spouštěných z prostředí SQL*Plus.

Post to Twitter

Leave a comment

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *