Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Spaß mit Nachrichten

Kürzlich sah ich jemanden, der darauf hinwies, dass er vor einigen Jahren einen Oracle-Techniker vor Ort hatte. Dieser Techniker hatte SQL*Plus so geändert, dass sein Feedback so etwas wie „über XX Zeilen ausgewählt“ statt nur „XX Zeilen ausgewählt“ sagte. Er fragte sich, wie die Technik das gemacht hatte. Ich musste mich einfach damit beschäftigen und Spaß damit haben. Ich konnte den Feedback-Text ändern und so sieht er jetzt in SQL*Plus für mich aus:

SQL> set feedback 1
SQL> select * from all_users where rownum <3;USERNAME USER_ID CREATED ---------------------- --- ---------- --------- SYS 0 30.01.09 SYSTEM 5 30.01.09 ungefähr 2 Zeilen ausgewählt. Geben oder nehmen.

SQL> wählen Sie sysdate aus dual;

SYSDATE
———
22-AUG-12

1 Zeile ausgewählt. Nur eine.

Wie habe ich also SQL*Plus dazu gebracht, den Feedback-Text zu ändern? Einfach.

1. Gehen Sie zu $ORACLE_HOME/sqlplus/mesg
2. Erstellen Sie Backup-Dateien von sp1us.msg und sp1us.msb (beachten Sie, dass ich in den USA bin, also ist meine Installation „us“, Sie haben möglicherweise einen anderen zweistelligen Ländercode).
3. Öffnen Sie sp1us.msg in einem Texteditor. Ich habe die Datei mit folgenden Einträgen versehen:
00005,0, "1 row selected. Just one."
// *Cause:
// *Action:
00006,0, "approximately %ld rows selected. Give or take."
// *Cause:
// *Action:

4. Speichern Sie Ihre Änderungen und beenden Sie den Editor.
5. Kompilieren Sie die msg-Datei in die binäre msb-Datei.
lmsgen sp1us.msg sqlplus sp1 american

Das ist alles dazu!

Ich beschloss, ein bisschen mehr Spaß damit zu haben. Dieses Mal wollte ich die mit der ORA-00942-Nachricht gelieferte Nachricht ändern. Also habe ich $ORACLE_HOME/rdbms/mesg/oraus.msg geändert, nachdem ich eine Sicherungskopie davon und seiner binären msb-Datei erstellt hatte. Dann habe ich LMSGEN verwendet, um die msg-Datei zu kompilieren:
lmsgen oraus.msg rdbms ora american
Wenn ich jetzt nach einer nicht existierenden Tabelle frage, erhalte ich Folgendes:
SQL> select * from no_table;
select * from no_table
*
ERROR at line 1:
ORA-00942: this is not the table you are looking for

Das ist natürlich nur zum Spaß. Ich würde das niemals in einer Produktionsumgebung tun. Und Sie wissen nie, wann ein Patch diese Dateien ändern wird, sodass die Pflege benutzerdefinierter Nachrichten auf lange Sicht zeitaufwändig sein kann. Aber es macht Spaß, damit zu spielen und jemanden etwas zu verwirren, wenn das nächste Mal ein ORA-Fehler auftritt.