Constructii (operatori) CASE pentru expresii de construcții
Ca o alternativă la funcția DECOFIDICAREA (nu este disponibil pe standardul soluție Oracle, decorate într-o funcție) și alte funcții, de căutare valori NVL condiționate, NVL2, NANVL și coaguleze la versiunea 8.1.6, puteți folosi „căutare“ a -vyrazheniem CASE și versiunea 9 - „simplu“ a -vyrazheniem CASE (ambele sunt incluse în standardul SQL-92). Formal declarație CASE construct își poate asuma (cu structura de sintaxă mai complexă decât în cazul, să zicem, operatorii aritmetici) utilizate pentru construirea de expresii mai simple. Pentru a utiliza este esențial ca rezultatul CASE nu este „definitiv“; este o expresie care nu este interzis să fie folosit pentru a construi un alt mai complex. În această structură CASE nu este diferit de alți operatori.
Sintaxa "căutare" operator CASE:
Inspecțiile au loc de sus în jos până la prima ordin conditional-vyrazhenieI nu devin realitate. Apoi verificați oprește, iar rezultatul va fi valoarea-CASE expresie rezultataI.
Sintaxa „simplu“ operatorul de caz:
Verificările au originea în jos până când valoarea primei ordinul vyrazheniyaI este egal cu valoarea vyrazheniya0. Apoi verificați oprește, iar rezultatul va fi valoarea-CASE expresie rezultataI.
Sintaxa expresiilor condiționale într-un caz urmează sintaxa acestei părți a clauzei WHERE în SELECT, UPDATE și DELETE. descris în continuare, și permite un design destul de complexe, așa cum arată exemplul de mai jos:
Rețineți că, în conformitate cu datele noastre rezultă KING servire va fi marcat ca fiind „plătit“. În cazul în care declarația CASE de verificare departamentul de locație și salariul inversat, King va fi marcat ca fiind „lucrări în New York.“
Exercitarea. Verificați ultima declarație.
Astfel, executarea unor elemente procedurale de construcție CASE în narațiunea în ansamblul său de construcție a cererilor primite în SQL.
Structura poate duce Lipsa ELSE la o lipsă de valoare, ca urmare (NULL), dar nu într-o eroare:
Se crede că indicația obligatorie îmbunătățește ALTCEVA înțelegerea textului de către programator (și, prin urmare, reduce riscul de eroare umană). Conform acestui punct de vedere, următoarea expresie nu este construit bine:
In schimb, scrie:
„Căutare“ specii CASE este mai generală decât „simplu“, deoarece permite expresiile condiționale se obțin operatori de comparare, altele decât = (egalitate).
Datorită faptului că proiectul CASE încadrat în forma de limba operatorului, nu o funcție ca DECODIFICAREA, NVL, NVL2, NANVL și coaguleze. devine nu numai substitut lor mai frecvente, dar, de asemenea, mai rapid și calculabile lor, deși ușor în fiecare caz. Acest lucru creează un stimulent să-l folosească în programarea acestuia, care nu sunt enumerate funcțiile de substituție cu valoare noțională. În același timp, textul cererii, de obicei, ocupă mai mult spațiu.
cerere scalar
Un alt design este de a forma exista expresii cu versiunea Oracle 9. Dacă interogarea returnează o singură coloană, și nu mai mult de o linie, o puteți introduce în paranteze, ca parte a expresiei la valoarea corectă.
În acest caz, rezultat mai multe văzut ca o greșeală, dar rezultatul este gol - ca o lipsă de valori, NULL:
Adăugarea unui zero în expresia de mai sus se face pentru a convinge cititorul că nu există valori în expresia scalară mai sus. În caz contrar, ar fi ajuns să folosească funcția NVL.
Exercitarea. Rescrieți ultima interogare utilizând funcția NVL pentru a determina răspunsul bazei de date în lipsa liniilor într-o interogare scalar.
Oracle scalar singură coloană interogare sintaxă în control, dar cu o singură linie - nr. Pentru a îmbunătăți fiabilitatea textului unele oferă, ca măsură artificială să includă în expresia condițională în clauza WHERE a interogării condiție suplimentară ROWNUM <= 1. например:
subquery scalar scalar în același sens ca și funcții scalare menționate, adică rezultatul său poate fi o matrice (de exemplu, o coloană de valori). În același timp, aceasta este singura valoare de retur poate fi foarte bine un obiect (în sensul de Oracle caracteristici obiect) și să aibă o structură clară a bazei de date.
expresii condiționale
Comentariile individuale cu privire la lipsa de valori în expresii
Expresia Operandul a cărei valoare este absentă (notată NULL), va conduce la o aceeași valoare absentă (NULL) în cazul în care:
- și expresia numerică temporară construită prin operații aritmetice;
- comparând expresia de toate tipurile.
Înțelege manipularea NULL, uneori, ajută la următoarea regulă: SQL percepe NULL expresii ca valoare necunoscută.
Atunci când se ocupă cu valori lipsă în baza de date folosesc adesea funcția NVL. Comparați răspunsurile:
Din păcate, utilizarea unei funcții formale de studiu NVL în astfel de cazuri nu există. Merită să-l folosească sau nu, acesta este rezolvată sensul că proiectantul bazei de date stabilește în ipoteza sări peste valorile din coloana. În acest caz, în cazul în care sensul - „Comisia necunoscut“ (necunoscut, „nici o valoare, pentru că nu se cunoaște bază de date, a fost primit în baza de date“), este necesar să se aplice cererii (1). În cazul în care sensul de „comision“ ( „angajatul nu a primit comisia“), cererea (2). Semnificația valorii lipsă într-un tabel SQL nu semnificat în baza de date; El există în afara bazei de date. dar, de asemenea, trebuie să fie luate în considerare în cadrul programului, de lucru cu baza de date. Aceasta este una dintre cele lung cunoscute probleme SQL.
Parțial rezolva această problemă specială ar putea folosi, în loc de semn „fără chip“ de lipsa de valori NULL sunt cel puțin două, cu alt sens (propus „nu se aplică“ - lipsește, dar inaplicabile - și „nu știu“ - lipsește, dar este cazul). Cu toate acestea, în acest caz, ar avea alte probleme legate de complexitatea utilizării logicii de patru cifre, și din acest motiv, în SQL refuza. Dezvoltatorii SQL sunt sfătuiți să utilizeze valorile lipsă din coloana numai în sensul de necunoscut = lipsesc, dar sunt aplicabile. În Oracle, aceasta placa are o valoare relativă, deoarece unele cereri (exemple întâlni, etc) sunt capabile să genereze valori lipsă exact în sensul de lipsă, dar inaplicabile.
Finalizarea aceeași decizie ar putea fi refuzul valorilor lipsă, în general. Deoarece în SQL acest lucru nu se face, unii sunt sfătuiți să evite consumul de valori care lipsesc în mod voluntar atunci când este posibil și modelează valorile lipsă (din diverse motive) fără utilizarea NULL. Reversul unei astfel de auto-constrângere ar aglomerează și complexitatea schemei de date la o interogare a bazei de date.