Nesen boot forumā bija kārtējais jautājums – vai var izveidot tabulu kolonu nosaukumus izmantojot ciparus. Vismaz man zināmajās var gan, tikai problēma ir mazliet cita – tā rezultātā mēs veidojam objektu nosaukumus, ar kuriem var ļoti viegli kļūdīties. Padomājiet paši – ja kolonas nosaukums ir skaitlis, cik grūti ir vienai kolonai pieskaitīt nevis otru kolonu, kuras nosaukums ir “2”, bet vienkārši skaitli 2? Otra lieta – vienmēr jāatceras, ka kolonas nosaukums jāliek pēdiņās (Oracle) vai apostrofos (MySQL), vai iespējams vēl kādos citos specsimbolos, savukārt, ja ir ielikts, tad atkal lasot kodu ir ļoti viegli palaist garām to, ka tā ir kolona, nevis vienkārši skaitlis 2.
Nu lūk domājot par šīm jaukajām iespējām, ka SQLā izmantot dažādas iespējas kā sabojāt gan savu, gan nākošo koda uzturētāju dzīvi, nāk prātā dažas iespējas, ar kurām gribējās padalīties publiski. Piemēri Oraclē, bet līdzīgas tehnikas noteikti var izmantot arī citur.
Mēs varam izveidot tabulas ar identiskiem nosaukumiem, tikai vienu lielajiem, vienu mazajiem burtiem:
SQL> create table A (lielais number); Table created. SQL> create table "a" (mazais number); Table created.
Pētam kāda tad nu izskatā tabula A un tabula a:
SQL> desc A Name Null? Type ----------------------------------------- -------- ------- LIELAIS NUMBER SQL> desc a Name Null? Type ----------------------------------------- -------- ------- LIELAIS NUMBER
Hmmm, kaut kā dīvaini, vai ne? Tas tāpēc, ka Oracle noklusēti visus nenopēdiņotus objektu identifikatorus pārveido uz lielajiem burtiem. Lai tiktu pie tabulas a, mums nosaukums jāraksta pēdiņās:
SQL> desc "a" Name Null? Type ----------------------------------------- -------- ------- MAZAIS NUMBER
Bet tas ir tikai priekš pirmziemniekiem. Krutāki džeki varētu spert soli tālāk un izveidot piemēram tabulas nosaukumu, kā tukšuma simbolu (space). Tad meklējot tabulu nosaukumus shēmā, cilvēkus ar vājākiem nerviem var viegli novest pie pārliecības, ka nupat ir iegūta nopietna Oracles kļūda – 3 ieraksti atlasīti, bet rāda tikai divus :O
SQL> create table " " (A number, "a" number); Table created. SQL> select table_name from user_tables; TABLE_NAME ------------------------------ a A 3 rows selected.
Bet nekas, arī tas vēl nav viss. Vai tad mums būtu jāapmierinās tikai ar simboliem, kas iegūstami uz klaviatūras? Noteikti nē! Atceramies (vai uzzinam kā nu kurš) par jauko iespēju lietot ALT taustiņu kopā ar cipartastatūras (numeric keypad) taustiņiem. Lūk izmantojam ALT+223 un iegūstam brīnišķīgu kolonas nosaukumu:
SQL> create table abnormal ("▀" number); Table created. SQL> desc abnormal Name Null? Type ----------------------------------------- -------- ------- ▀ NUMBER
Tiec nu tagad manai kolonai klāt! 😉
Varam, protams, paeksperimentēt ar iebūvētajām funkcijām, arī tas dod iespēju izveidot kolonu, pie kuras nemaz tik viegli nevar tikt klāt. Tātad neieliekot kolonas nosaukumu pēdiņās, to nemaz neredz.
SQL> create table personas (vards varchar2(10), "SYSDATE" date); Table created. SQL> insert into personas values ('Jānis', sysdate-1); 1 row created. SQL> select vards, sysdate from personas; VARDS SYSDATE ---------- --------- Jānis 31-JAN-09 1 row selected. SQL> select vards, "SYSDATE" from personas; VARDS SYSDATE ---------- --------- Jānis 30-JAN-09
Nu lūk nepavisam nav nepieciešams apmierināties tikai ar cipariem un skaitļiem, novest ļaudis totālā nesapratnē var arī daudz elegantāk un efektīvāk 🙂