7 Marcin Szeliga
STANDARD ANSI ORAZ IMPLEMENTACJE MS SOL SERVER I POSTGRESQL
/natrmki języka $Ql moim podnelk w dnewiął grup:
Dyrektywy
Koniec instrukcji
\rrw*ry bat danych ignoruj wyslfpuj^cr w mitrukijich SQI inalii konia winna Koniec ini(njkc|i otnacia nę tymbołem j MS SQL Serwer
(redmk ras(fpu|« dyrektywa GO powoduje ona wyilamt do irrwrra baty danych i wykonanie wwyilkirh lapiunyth od momtnlu ostatniego wystąpienia dyrektywy instrukcji
1. Dyrektywa GO nie mote występował w tym tamwm wiertni to jakakolwiek instrukcja piyka SQL W wiertłu i dyrektywy GO moina umieszczał jedynie komentarze
2. Zakres imiennych uiytkownika ogramciooiy |eil do bloku skryptu tapnanego pomifdiy pouut|ólnymi dyrektywami GO.
1 Następujące mitrukcje muszą lostad oddntlone dyrektywą GO od pozostałych CREATE PROCEDURĘ, CREATE VlfW, CREATE TRIGGER, CREAff RULE, CREATE DEFAULT orał (o ile me utyto dyrektywy EXEC) wywołania procedur 4 Dyrektywa GO jen poprawnie interpretowana tylko pnei programy H\ Qutry Analyrer i 0SQL Wywołani* procedury
END
friyklad (zapytanie zwracające dane o podatku prrypnanym do dane| kategorii produktów):
STLECT ProductID, CategorylD,
CASE CategorylD WHEN 1 THLN 5.10 WHEN 2 THEN 1 WlirN 3 1HEN 5,50 WHEN 4 THEN 1.55 WHrN w IHEN 0 WHEN b THEN 9.05 WHEN 1 THEN 5 WHEN 8 THEN 9.05 END AS Podatek EROM Products
Identyfikatory
Okreilaiące obiekty i umoiliwiające odwoływanie nę do pnechowywinych w mdi danych lub do ich metod, zdarzeń ery wlatctwslci Identyfikatory mutią byt igodne z
przyjęta konwencją nazewnierą
• Identyfikatory mogą składał się z me wi niz 121 znaków.
więtei
Do wywołania procedury tkladowanej sluiy dyrektywa CAIL. Umoiliwia ona peiekaiame do wywoływanej procedury parametrów i odczytanie wyniku jej działania Mł SOŁ łąnwr
Dyrektywa CALI lostała zastąpioną dyrektywą EXEC (EXł CUTI) Opróci wywołania procedury umożliwia ona wykonanie tiągu znaków, będącego instrukcją pryka SOL (wykonywanie tworzonych dynamicznie instrukcji SQL). Składnia:
|[EXEC [UTE]]
i
[fTwróconystan wykonania •] (nazwa procedury [; liczba]
| Pn«/wa_procedury
|(Pparametr >] (wartoSC | Dzmlenna
rOUTPUT] I [DEFAIHT]]
[.-ni
(WI TH RECOMP1LE] gdzie
P/wrńcony * tanwykonant a jett opcjonalną zmienną lokalną, przechowującą inlormacjf o lianie wykonania wywoływanej procedury lub funkcji,
Rnarwa procedury jest nazwą zmiennej lokalnej, przechowującej nazwę wywoływanego obiektu,
OUT PU 1 okretla, ze wywoływana procedura jest łunkcią rwracającą jaką! wartość,
DFFAULI przekazuje do procedury domyślne, okrtilone podczas jej tworzenia wartoici parametrów wywołania,
WITH RECOHPILF wwmutza ponowną kompilację kodu wywoływany procedury lub funkcji, co wiąże lię Z obliizemem nowego planu jej wykonania, bazującego na aktualnych statystykach.
PootgreSQL
Procedury napnane w językach proceduralnych mogą rosiał wywołane dyrektywą CALE Zwracające dane lunkcje wywołuje lię milrukcią Sn ECT, pny czym hinkc|e zwracające wartoici skalarne będą wywoływane w klauzuli SEl ECT, WHERE, ORDER BY,
GROUP BY lub HAVING. a lunkcje zwracające zbiory ■ w klauzuli FROM
itrm i
• Identyfikator nu mott był ilowtm zastrzeżonym języka SQl
• Identyfikator może uwierał litery, cyfry oraz symbole P, f, Wynika z tego, że identyfikatory nie mogą zawierał spacji ani pozostałych symboli specjalnych (PoitgrrSQL zezwala na stołowanie znaku $).
• Identyfikatory me igodne z konwencją naztwniczą mutrą był wyróżniane za pomocą cudzysłowów
Mł $01 tanear
Identyfikatory powinny był wyróżniane za pomocą nawiatów
kwadratowych
Komentarze
komentarze są ignorowanymi priiz kompilator ciągami znaków. Tekst komentarza wyróżniany jest za pomocą znaków /* */ kompilator ignoruje wszystkie znaki (z wyjątkiem dyrektywy GO) znajdujące stę pomiędzy tymi znacznikami. Zdefiniowanym w itandardzie ANSI znakiem komentarza lą dwa myślniki (--) kompilator ignoruje znajdujące lię po prawt| strome mytlników znaki
Operatory
Opetatoty pełnią rolę ipójników języka SQE i choł w większości mogą zostać zastąpione odpowiednią lunkcją, to poprawiają czytelnoił kodu programu Funkcja każdego operatora zależy od kontokitu jego wystąpienia Operatory a7tmetyczne
W jęryku SQI występują następujące operatory arytmetyczne.
• iloczyn (*),
• iloraz (A
• modulo (k),
• luma (A
• różnica (-).
Operator ciągów znaków_
jedynym operatorem ciągów maków jett operator konkatenacji (|1). Pozostałe operacje na ciągach znaków przeprowadzane tą przez odpowiednie lunkcje ciągu znaków MS SQL Serwer Operatorem konkatenacji jest mak *.
Operatory logiczne ___
• alternatywa logiczna (|),
• negacja logiczna (-).
• alternatywa wyłączna (operatorem XOR serwera HS SQL Serwer jestA, PostgreSQLa f),
PostjreSOL
Serwer fottgreSQl umożliwia dodatkowo wykonanii następujących operacji na poziomie bitów:
• przesunięcie w lewo («),
• przesunięcie w prawo (>»).
Hierarchia operatorów
Jeżeli w jrdnym wyrażeniu posłużono lię kilkoma operatorami, serwer baz danych obliczy |ego wartoił w następującej (mogące| wpłynął na wynik) kole|nołci I. Operatory umieszczone w nawiasach,
2 Mnożenie, dzielenie, modulo.
3 Dodawanie, odejmowanie 4. Operatory porównania
5 Operatory jwziomu hilow.go
6 Konkatrnac|a
7 Negacja
1. Komunkcja 9 Alternatywa,
10. Przypisanie wartoici imiennej (-).
) [.-n]
< typ tabel 1 > ::■
TABLE ((< definicja kolumny *
)
gdzie
CURSOR okreila, Że zmienna będzie kursorem
Instrukcja SET__
Nadaje wartoił zdefiniowanej zmiennej,
Składnia
SET P/mlenna * wyrażenie Przykład:
DECLARE Pznajdz varchar(30)
SF.T Dznajdz « 'FraV
SFlECT CompanyName, Atldresi, Phone
FROM Customers
WHERE CompanyName L1KE Cznajdz
Znaczniki sterujące wykonaniem programu
Słowa kluczowe
Słowa kluczowe tą ciągami znaków, mających kitle okreilone znaczenie i interpretowanych przez terwer baz danych w sposób charaktetyslycmy dla słowa kluczowego Niedopuszczalne gest używanie iłów kluczowych niezgodnie z okrełlonymi dla nich zasadami tynuktytmymi (na przykład w niewłaiciwtj dla słowa klauzuli! oraz z okrełlonymi dla nich zasadami semantycznymi (ich znaczeniem).
W przećiwieAiCww do standardu ANSI SOL, impłementacje języka posiadają kilka wiórowanych na językach proceduralnych znaczników sterujących wykonaniem programu
ssois
a języka l-HJL »
wchodzą one w iklad dodatkowego, otobno imtalowanego
W przypadku HS SOL Senrera opisywane znaczniki /ostały dodane do iłowmka języka T-SQL, w przypadku PostgriSQl
Wyrażenia
Wyrażenia są połączeniem symboli i operatorów, reprezentującym pojodynczą wartoił. typ reprezentowanych danych zalety od typu elementów wyrażenia,
Zmienne
W przypadku HS SQl Sewera ot dodane do słownika języka T SQ id dodatl
mywane znaczniki zostały SQL
wchodzą on* w skład dodatkowego, osobno instalowanego
, w przypadku PoitgreSQt
Kzyka PL/pgSOl
Instrukcja IECIW ... END
BEGIN .. ENO wydzielają zbiór instrukcji SOL traktowanych |ako lunkr jonalna uloił (blok instrukcji)
W serwerze PottgreSOL instrukcja HFGIN rorpoizyna transakcję.
Instrukcja GOTO
Powodu|r iinianę ijioiobii wykonania programu i |ir/f|Rif do oznaaonei etykietą intmikcji Instrukcje znajdujące lię u poleceniem GOLO me zostaną wykonane
Instrukcja IF ... ELSE
uzyka fiypgSOL Zmienne chan
irakteryzują się narwą, typem i wartoicią Dzięki imiennym możemy:
• przechowywał wartoici zwrócone przei funkcje «celu ich późniejszego wykorzystania (w standardzie SOI funkcjonalnym odpowiednikiem zmiennych
tą podzapytama),
• wielokrotnie wykorzystał tan sam kod do wykonywania operacji na różnych danych wejiciowych
Instrukcja DECLARE_________
Wykonanie instrukcji spowoduje utworzenie zmiennej o okreilonej nazwie i typu Wartoił zadeklarowanej zmiennei ustawiana jest na NULI.
Składnia
DEC-IARE
((^zmienna typ}
I (Pkursor-CUtfSOR)
| jtyptabeli)
instrukcja IF ... ELSE pozwala na warunkowe wykonanie instrukcji SQl Instrukcja zostanie wykonana, jeżeli warunek zostanie spełniony, w przeciwnym wypadku może został wykonana initrukcja umieszczona w opcjonalnej klauzuli ELSE.
Instrukcja RETURN
PowtłeJuja natychmiastowe przerwanie wykonywalna
procedury lub bloku inslru kij. SOL
Instrukcja WAITFOR
ókreila czat, po którym okreilona instrukcja rottame
wykonana.
Instrukcja WHILE
Polecenie WHILE pozwala na wielokrotne (ar do momentu spełnienia okreilonego warunku logicznego) wykonanie instrukcji SQL Dodatkowo moremy sterował wykonaniem instrukcji za pomocą iłów kluczowych BREAK i f DNTINUE, gdzie:
» BREAK powoduje natychmiailowe przerwanie wykonjrwama intlrukcji SOL,
• EONIINUL powoduje rettan pętli WHILE,
Instrukcje znajdujące się za poleceniem CONTI NUL nie zoitaną wykonane
TYPY DANYCH
Funkcjo
Funkcje języka SOL można podzielił na cztery kategorie I funkcje skalarne, które zwracają pojedynczą wartoił obliczoną na poditawie zera lub większej liczby argumentów skalarnych
2. funkcji grupujące, które zwracają pojedynczą wartoił dla zbioru argumentów wywołania ) 2wrata|ąct rotory danych lunkcje typu RowSrl, do których można się odwoływał jak do tabel, w klauzuli TROK
4 funkcje sterujące wykonaniem programu Decyzja o zaimplementowaniu powczególnych funkcji należy do twórcy serwera haz danych Wyjątkiem jest U|ęta w standardzie ANSI funkcja CASE.
Funkcja starująca wykonaniem programu CASE Sprawdza wartoił argumentu wywołania i zwraca jeden i wielu predefiniowanych wyników Składnia
CASE argument
WHEN warunek THEN wynik
Operatory logiczne wykorzystywane są najczęściej do łączenia warunków umieszczonych w klauzulach WHF RE 1 H AVI NG. Występują trzy operatory logiczne:
• komunkcji (ANO), zwracający wartoił I (prawda), jeżeli oba wyrażenia są prawdziwe,
• alternatywy (OR), (wracający wartoił I (prawda), jeżeli którekolwiek z wyrażeń jest prawdziwe,
• negacji (NOT), zwracający wartoił 1 (prawda), jeżeli wyrażenie było nieprawdziwe i O w przeciwnym wypadku
Oparatory porównania
Do operatorów porównania lęzyka SQl talu tamy
• równy (-),
• mniejszy nu (• ),
» większy niz (»),
• mniejszy lub równy ('■*),
• większy lub równy (»-),
• różny («»),
• ruiny do zbioru (IN),
• należy óo przedziału (BE I WE EN AND),
• jest zgodny re wzorcem (UKF),
Operatory połiomu bitowego Język SQL umożliwia wykonywanie podstawowych operacji na bitach
• mnożenie logiczne (A),
Standard ANSI SQL 3 definiuje następujące ttniktury danych. | |
1 Typy liczbowe f | |
blgint |
reprezentuje Huby całkowite z zakresu od 2“ (-9 223 372 03* 154 77$ 101) do 2*'- 1 (9 223 372 03* IS4 77S107). |
reprezentuje liczby całkowite z zakrętu od lh (-2147 413 *41) do 2]l - 1 (2 147 4*3 *47). | |
smaliInt |
reprezentuje liczby całkowite z zakrętu od -2lł (-32 7*1) do 2" 1 (32 7*7) |
tinymii |
(HS SQL Serwer) npruentuje liczby całkowite z zakresu od 0 do 25$ |
dncimul |
reprezentuje liczby o okreilonei tkali i precyzji z zakresu od -10”+ 1 do 10” • 1. Typ numer! c jest synonimem typu dectmal, |
float |
reprezentuje liczby o zmiennej |
precyzji z zakresu od l,79E f 306 do l,79E l 301 | |
real |
reprezentuje liczby o zmiennej precyzji z zakresu od -3.40L 1 3* do 3,401 + 3* Typy zmiennoprzecinkowe charakteryzują |
bit
lię tym, ze wartoici
tak zapisanych danych przechowywane są z pewną skoóczoną dokładnością (HS SQl Serwer) reprezentuje 0 lub I Ten typ często notowany jest jako odpowiednik niezoimplementowanego w tym torwerze typu logicznego___
Typy daty i czasu
datettne (HS SQL Serwer) reprezentuje
datę i czas z zakresu od I stycznia I7S3 do 31 gtudnia 9999, z dokladnoicią _ do |ednrj milisekundy
sm.ii id.net im> (HS SQL Serwer) reprezentuje datę i czat z zakrętu od I stycznia 1900 do i czerwca 2079, z dokladnoicią
_ do jtdnti minutę__
datę (PottgreSQl) reprezentuje datę
' _i dokladnoicią du jednego dnia
tiiw _(Poitgr*SQL) reprezentuje czai
Umestamp (PostgreSQl) reprezentuje datę I czat