Ostatnio widziałem, jak ktoś wskazał, że kilka lat temu miał na miejscu technologię Oracle. Ta technologia zmieniła SQL*Plus tak, że jej opinie mówiły coś w stylu „Wybrano XX wierszy” zamiast „Wybrano XX wierszy”. Zastanawiał się, jak technik to zrobił. Po prostu musiałem się w to zagłębić i dobrze się z tym bawić. Udało mi się zmienić tekst opinii i oto jak wygląda teraz w SQL*Plus dla mnie:
SQL> set feedback 1
SQL> select * from all_users gdzie rownum <3;USER_ID USER_ID CREATED --------------------------- --- ---------- --------- SYS 0 30-STY-09 SYSTEM 5 30-STY-09 Wybrano około 2 wiersze. Dawaj lub bierz.
SQL> wybierz sysdate z dual;
SYSDATE
———
22-SIE-12
Wybrano 1 wiersz. Tylko jeden.
Jak więc zmusiłem SQL*Plus do zmiany tekstu opinii? Proste.
1. Przejdź do $ORACLE_HOME/sqlplus/mesg
2. Utwórz kopie zapasowe sp1us.msg i sp1us.msb (pamiętaj, że jestem w USA, więc moja instalacja to „us”, możesz mieć inny dwuznakowy kod kraju).
3. Otwórz sp1us.msg w edytorze tekstu. Plik ma te wpisy:00005,0, "1 row selected. Just one."
// *Cause:
// *Action:
00006,0, "approximately %ld rows selected. Give or take."
// *Cause:
// *Action:
4. Zapisz zmiany i wyjdź z edytora.
5. Skompiluj plik msg do binarnego pliku msb.lmsgen sp1us.msg sqlplus sp1 american
To wszystko!
Postanowiłem się z nim trochę zabawić. Tym razem chciałem zmienić wiadomość dostarczoną wraz z wiadomością ORA-00942. Zmodyfikowałem więc $ORACLE_HOME/rdbms/mesg/oraus.msg po wykonaniu kopii zapasowej tego i jego binarnego pliku msb. Następnie użyłem LMSGEN do skompilowania pliku msg:lmsgen oraus.msg rdbms ora american
Teraz, gdy wysyłam zapytanie o nieistniejącą tabelę, otrzymuję następujące informacje:SQL> select * from no_table;
select * from no_table
*
ERROR at line 1:
ORA-00942: this is not the table you are looking for
Oczywiście to tylko dla zabawy. Nigdy nie zrobiłbym tego w środowisku produkcyjnym. I nigdy nie wiadomo, kiedy łatka zmodyfikuje te pliki, więc utrzymywanie niestandardowych wiadomości może być czasochłonne na dłuższą metę. Ale fajnie jest bawić się tym i dać komuś trochę zamieszania, gdy następnym razem trafi na błąd ORA.