sql >> Database teknologi >  >> RDS >> Oracle

Sjovt med beskeder

For nylig så jeg nogen angive, at de havde en Oracle-tekniker på stedet for nogle år siden. Denne teknologi havde ændret SQL*Plus, så dens feedback sagde noget i retning af "omkring XX udvalgte rækker" i stedet for blot "XX udvalgte rækker". Han undrede sig over, hvordan teknologien gjorde det. Jeg var bare nødt til at grave ned i det her og have det sjovt med det. Jeg var i stand til at ændre feedbackteksten, og sådan ser den ud nu i SQL*Plus for mig:

SQL> sæt feedback 1
SQL> vælg * fra alle_brugere hvor rækkenummer <3;BRUGERNAVN BRUGER_ID OPRET ---------------------------------- --- ---------- ---------- SYS 0 30-JAN-09 SYSTEM 5 30-JAN-09 ca. 2 rækker valgt. Giv eller tag.

SQL> vælg sysdate fra dual;

SYSDATE
———
22-AUG-12

1 række er valgt. Bare én.

Så hvordan fik jeg SQL*Plus til at ændre feedbackteksten? Simpelt.

1. Gå til $ORACLE_HOME/sqlplus/mesg
2. Lav sikkerhedskopier af sp1us.msg og sp1us.msb (bemærk, jeg er i USA, så min installation er "os", du kan have en anden landekode med to tegn).
3. Åbn sp1us.msg i en teksteditor. Jeg fik filen til at have disse indgange:
00005,0, "1 row selected. Just one."
// *Cause:
// *Action:
00006,0, "approximately %ld rows selected. Give or take."
// *Cause:
// *Action:

4. Gem dine ændringer, og afslut editoren.
5. Kompiler msg-filen til den binære msb-fil.
lmsgen sp1us.msg sqlplus sp1 american

Det er alt, hvad der er til det!

Jeg besluttede at have det lidt sjovere med det. Denne gang ønskede jeg at ændre den besked, der blev leveret med ORA-00942-meddelelsen. Så jeg ændrede $ORACLE_HOME/rdbms/mesg/oraus.msg efter at have lavet en sikkerhedskopi af den og dens binære msb-fil. Så brugte jeg LMSGEN til at kompilere msg-filen:
lmsgen oraus.msg rdbms ora american
Når jeg nu forespørger efter en ikke-eksisterende tabel, får jeg følgende:
SQL> select * from no_table;
select * from no_table
*
ERROR at line 1:
ORA-00942: this is not the table you are looking for

Det er selvfølgelig kun for sjov. Jeg ville aldrig gøre dette i et produktionsmiljø. Og du ved aldrig, hvornår en patch vil ændre disse filer, så det kan være tidskrævende at vedligeholde brugerdefinerede meddelelser i det lange løb. Men det er sjovt at lege med dette og give nogen forvirring, næste gang de rammer en ORA-fejl.


  1. TIMESTAMPADD() Eksempler – MySQL

  2. Dato i en URL dd/mm/åååå

  3. Python 3.4.0 med MySQL-database

  4. SQL Server:Hvordan bruger man UNION med to forespørgsler, der BEGGE har en WHERE-klausul?