Oracle
 sql >> Base de données >  >> RDS >> Oracle

Amusez-vous avec les messages

Récemment, j'ai vu quelqu'un indiquer qu'il avait un technicien Oracle sur place il y a quelques années. Cette technologie avait modifié SQL*Plus afin que ses commentaires indiquent quelque chose comme « environ XX lignes sélectionnées » au lieu de simplement « XX lignes sélectionnées ». Il se demanda comment la technologie faisait ça. Je devais juste creuser cela et m'amuser avec. J'ai pu modifier le texte des commentaires et voici à quoi il ressemble maintenant dans SQL*Plus pour moi :

SQL> set feedback 1
SQL> select * from all_users where rownum <3;USERNAME USER_ID CREATED ---------------------- --- ---------- --------- SYS 0 30-JAN-09 SYSTEM 5 30-JAN-09 environ 2 lignes sélectionnées. Donner ou prendre.

SQL> sélectionnez la date système à partir du double ;

DATESYS
———
22-AOÛT-12

1 ligne sélectionnée. Juste un.

Alors, comment ai-je fait en sorte que SQL*Plus modifie le texte des commentaires ? Simple.

1. Accédez à $ORACLE_HOME/sqlplus/mesg
2. Créez des fichiers de sauvegarde de sp1us.msg et sp1us.msb (remarque, je suis aux États-Unis, donc mon installation est "nous", vous pouvez avoir un code de pays à deux caractères différent).
3. Ouvrez sp1us.msg dans un éditeur de texte. J'ai fait en sorte que le fichier contienne ces entrées :
00005,0, "1 row selected. Just one."
// *Cause:
// *Action:
00006,0, "approximately %ld rows selected. Give or take."
// *Cause:
// *Action:

4. Enregistrez vos modifications et quittez l'éditeur.
5. Compilez le fichier msg dans le fichier binaire msb.
lmsgen sp1us.msg sqlplus sp1 american

C'est tout ce qu'on peut en dire!

J'ai décidé de m'amuser un peu plus avec. Cette fois, j'ai voulu changer le message délivré avec le message ORA-00942. J'ai donc modifié $ORACLE_HOME/rdbms/mesg/oraus.msg après en avoir fait une sauvegarde et son fichier binaire msb. Ensuite, j'ai utilisé LMSGEN pour compiler le fichier msg :
lmsgen oraus.msg rdbms ora american
Maintenant, lorsque j'interroge une table inexistante, j'obtiens ce qui suit :
SQL> select * from no_table;
select * from no_table
*
ERROR at line 1:
ORA-00942: this is not the table you are looking for

Bien sûr, c'est juste pour le plaisir. Je ne ferais jamais cela dans un environnement de production. Et vous ne savez jamais quand un correctif va modifier ces fichiers, donc la gestion des messages personnalisés peut prendre du temps à long terme. Mais c'est amusant de jouer avec ça et de semer la confusion chez quelqu'un la prochaine fois qu'il aura une erreur ORA.