Académique Documents
Professionnel Documents
Culture Documents
str. 1/140
Spis treci
O Oracle ludzkim gosem.................................................................................................................1
Licencja na wykorzystanie materiaw................................................................................................4
Niezbdne oprogramowanie.................................................................................................................4
Podstawowe pojcia.............................................................................................................................5
Uytkownik HR i jego schemat ...........................................................................................................9
Podstawowe narzdzia........................................................................................................................10
SQL*Plus..................................................................................................................................10
SQLDeveloper....................................................................................................................................11
Typy danych.......................................................................................................................................14
Typ numeryczny........................................................................................................................14
Typy znakowe ..........................................................................................................................14
Inne typy...................................................................................................................................15
Instrukcja SELECT............................................................................................................................16
Sortowanie .........................................................................................................................................22
Operatory ...........................................................................................................................................25
Filtrowanie wierszy............................................................................................................................28
Funkcje znakowe................................................................................................................................32
Funkcje numeryczne...........................................................................................................................41
Daty i funkcje do manipulowania datami...........................................................................................42
Funkcje agregujce.............................................................................................................................47
Grupowanie .......................................................................................................................................49
Operatory zbiorowe ...........................................................................................................................53
ZCZENIA......................................................................................................................................55
ZCZENIE WEWNTRZNE................................................................................................56
ZCZENIA ZEWNTRZNE.................................................................................................57
SAMOZCZENIA.................................................................................................................58
ZCZENIA TYPU JOIN.......................................................................................................59
PODZAPYTANIA..............................................................................................................................63
Zarzdzanie transakcjami ..................................................................................................................68
Dodawanie danych [INSERT] ...........................................................................................................70
Kasowanie danych [DELETE] ..........................................................................................................71
Modyfikowanie danych [UPDATE] ..................................................................................................71
Tabele .................................................................................................................................................72
Wizy integralnoci ...........................................................................................................................75
Widoki................................................................................................................................................78
Sekwencje ..........................................................................................................................................80
Informacje podstawowe o PL SQL.....................................................................................................84
Rodzaje blokw PL/SQL....................................................................................................................84
Bloki anonimowe......................................................................................................................85
Procedury .................................................................................................................................86
Funkcje
...................................................................................................................................................88
Wyzwalacze...............................................................................................................................90
Typy danych w PL/SQL ....................................................................................................................93
Zmienne i stae ..................................................................................................................................94
Instrukcje sterujce ............................................................................................................................96
IF THEN ...................................................................................................................................96
CASE........................................................................................................................................97
Ptle ...................................................................................................................................................98
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl
str. 2/140
str. 3/140
Niezbdne oprogramowanie
Aby mc wykorzysta i przetestowa przykady z niniejszej ksiki, naley zainstalowa
ponisze oprogramowanie:
SQLDeveloper
Plik instalacyjny Oracle Express Edition , oraz SQLDeveloper mona bezpatnie pobra ze
strony internetowej Oracle (www.oracle.com). Trzeba si jedynie uprzednio zarejestrowa
w ich systemie (co te jest bezpatne).
str. 4/140
Podstawowe pojcia
Baza danych
to zbir danych zapisanych w cile okrelony sposb w strukturach odpowiadajcych
zaoonemu modelowi danych. W potocznym ujciu obejmuje dane oraz komputerowy
program wyspecjalizowany do gromadzenia i przetwarzania tych danych. Baza danych
jest zoona z rnych elementw. Najwaniejszymi z nich jest rekord podzielony na kilka
pl, w ktrych s przechowywane informacje poszczeglnych kategorii. Na przykad w
ksice adresowej kady rekord to zbir informacji na temat jednej osoby. Skada si on z
kilku pl przechowujcych takie informacje, jak: imi, nazwisko, adres, numer telefonu itp.
W kadym polu zapisywane s dane oddzielonej kategorii.
RDBMS
Relational Database Management System (RDBMS, dosownie system zarzdzania
relacyjn baz danych) to zestaw programw sucych do korzystania z bazy danych
opartej na modelu relacyjnym.
SQL
strukturalny jzyk zapyta uywany do tworzenia, modyfikowania baz danych oraz do
umieszczania i pobierania danych z baz danych. Jzyk SQL jest jzykiem deklaratywnym
Decyzj o sposobie przechowywania i pobrania danych pozostawia si systemowi
zarzdzania baz danych (DBMS).Uycie SQL, zgodnie z jego nazw, polega na
zadawaniu zapyta do bazy danych. Zapytania mona zaliczy do jednego z trzech
gwnych podzbiorw:
DML
DML (Data Manipulation Language) suy do wykonywania operacji na danych do ich
umieszczania w bazie, kasowania, przegldania, zmiany. Najwaniejsze polecenia z tego
zbioru to:
SELECT pobranie danych z bazy,
INSERT umieszczenie danych w bazie,
UPDATE zmiana danych,
DELETE usunicie danych z bazy.
str. 5/140
DDL
Dziki DDL (Data Definition Language) mona operowa na strukturach, w ktrych dane
s przechowywane czyli np. dodawa, zmienia i kasowa tabele lub bazy.
Najwaniejsze polecenia tej grupy to:
CREATE (np. CREATE TABLE, CREATE DATABASE, ) utworzenie struktury
(bazy, tabeli, indeksu itp.),
DROP (np. DROP TABLE, DROP DATABASE, ) usunicie struktury,
ALTER (np. ALTER TABLE ADD COLUMN ) zmiana struktury (dodanie kolumny
do tabeli, zmiana typu danych w kolumnie tabeli).
DCL
DCL (Data Control Language) ma zastosowanie do nadawania uprawnie do obiektw
bazodanowych. Najwaniejsze polecenia w tej grupie to:
GRANT (np. GRANT ALL PRIVILEGES ON EMPLOYEE TO PIOTR WITH GRANT
OPTION) przyznanie wszystkich praw do tabeli EMPLOYEE uytkownikowi PIOTR z
opcj pozwalajc mu nadawa prawa do tej tabeli.
REVOKE odebranie uytkownikowi wszystkich praw do tabeli, ktre zostay
przyznane poleceniem GRANT.
DENY.
str. 6/140
Uytkownicy i schematy
Kiedy uytkownik bazy danych tworzy obiekt, jednoczenie staje si jego wacicielem.
Obiekty te tworzone s w tak zwanym schemacie uytkownika, czyli logicznej przestrzeni
bazy danych. Schemat uytkownika jest tworzony automatycznie podczas definiowania
uytkownika i posiada on unikaln nazw, ktra jest identyczna z nazw uytkownika.
Nazwa schematu wykorzystywana jest do wskazania obiektw bazy danych stanowicych
wasno danego uytkownika. Odwoanie do obiektu znajdujcego si w innym
schemacie umoliwia nastpujca skadnia:
NAZWA_UYTKOWNIKA.NAZWA_OBIEKTU
Nazwy obiektw musz by unikalne w obrbie schematu. Dwch uytkownikw moe
posiada obiekt o tej samej nazwie w swoich schematach, natomiast rnie bd si do
nich odwoywa. Jeli uytkownik Kowalski oraz Nowak maj w swoich schematach
obiekty o nazwie Towary mog si do nich odwoywa (przy zaoeniu e maj do tego
uprawnienia) dodajc nazw uytkownika kolegi przed nazw obiektu. Uytkownik
Kowalski odnoszc si do swojego obiektu wywouje go :
TOWARY
Jeli zechce odnie si do obiektu kolegi:
NOWAK.TOWARY
str. 7/140
str. 8/140
Jeeli zrobisz to tak jak ja, haso do uytkownika HR bdzie brzmiao hr.
str. 9/140
Schemat uytkownika HR
Przykadowe dane uytkownika HR s informacjami o firmie, jej oddziaach i
pracownikach.
Tabela departments zawiera dane o dziaach firmy.
Tabela locations zawiera dane o pooeniach w ktrych mog znajdowa si dziay.
Tabela countries zawiera informacje o krajach w ktrych znajduj si poszczeglne
lokalizacje dziaw.
Tabela regions zawiera dane o regionach caego wiata w ktrych znajduj si kraje.
Tabela jobs zawiera informacje o stanowiskach ktre zajmuj pracownicy firmy oraz
przypisanych do nich minimalnych i maksymalnych pac.
Tabela employees zawiera informacje o pracownikach firmy.
Tabela job_history zawiera informacje jacy pracownicy w jakim okresie zajmowali jakie
stanowiska.
Podstawowe narzdzia
SQL*Plus
Jzykiem ktry umoliwia zarzdzaniem baz danych jest jzyk SQL (Structured Query
Language).
Wszystkie narzdzia dostpne na rynku suce do graficznego zarzdzania baz I
umoliwiajce wyklikanie zapytania s jedynie nakadk na ten jzyk. SQL*Plus jest
podstawowym narzdziem Oracle sucym do komunikacji z baz danych. Umoliwia
wykonywanie zapyta do bazy I wywietlania wynikw. Pozwala te na dodawanie oraz
modyfikacj istniejcych danych. Poza obsug polece SQL, SQL*Plus posiada te
zestaw wasnych komend sucych do konfiguracji programu oraz nawizywania
pocze z bazami.
Aby uruchomi SQL*Plus wybierz jego nazw z menu start lub wpisz w konsoli
SQLPLUS NAZWAUZYTKOWNIKA/JEGOHASLO@SIDBAZY
lub po prostu sqlplus, zostaniesz wtedy poproszony o nazw uytkownika i haso.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 10/140
SQLDeveloper
Graficzn alternatyw dla SQL Plusa jest SQL Developer. Moemy z niego
korzysta pod warunkiem, e moemy si poczy z serwerem Oracle
poprzez sie (mamy port nasuchu otwarty) lub jeeli czymy si
bezporednio z maszyny na ktrej zainstalowany jest serwer. Jest to program
bezpatny rozpowszechniany przez firm Oracle. Musimy go jednak
zainstalowa oddzielnie, nie jest dostarczany wraz z baz danych.
Port port sieciowy pod ktrym nasuchuje serwer bazy danych. Domylny
jest 1521
SID sid bazy, dla naszych potrzeb bdzie to zawsze XE. Jeli pracujesz na
innej wersji Oracle ni Express Edition zapytaj swojego administratora o sid
bazy.
Jeli autoryzujemy si jako uytkownik SYS, musimy dodatkowo zmieni
Role z Default na SYSDBA.
Prawidowo wprowadzonych danych moemy sprawdzi naciskajc
przycisk Test. W lewym dolnym rogu okna zostanie wypisany status
poczenia: Success jeli dane umoliwiaj autoryzacj, lub Failure z
przyczyn jeli nie mona zrealizowa poczenia.
Poczenie moemy zapisa klikajc SAVE oraz poczy si klikajc
CONNECT.
Drzewo obiektw
Po uruchomieniu nowego poczenia moemy z zakadce Connections
klikamy w krzyyk znajdujcy si przy nazwie poczenia. Pojawi nam si
okno edycji oraz lista obiektw bazy danych pogrupowana w kategorie.
Rozwijajc kolejne gazie moemy przeglda listy obiektw, struktury , a
nawet zawarto tabeli (po dwukrotnym klikniciu jego symbolu).
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 12/140
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 13/140
Typy danych
W Oracle jest bardzo wiele typw danych. W poniszym zestawieniu prezentuj tylko te
najpowszechniejsze.
Typ numeryczny
Number(P,S)
Ten typ moe przechowywa typy rzeczywiste oraz cakowite. P oznacza ilo cyfr w caej
liczbie, natomiast S oznacza ilo miejsc po przecinku.
Typy znakowe
Char(L)
Przechowuje sta ilo znakw zadeklarowan jako parametr L. L musi by mniejsze ni
256. Przykadowo jeli do kolumny typu Char(100) wstawimy pojedyncz liter,
przechowywane bdzie 100 znakw. Warto zostanie uzupeniona do 100 spacjami.
Varchar2(L)
Dane tego typu zajmuj dokadnie tyle miejsca ile zostanie przypisanych znakw.
Parametr L okrela maksymaln ilo znakw. L musi by mniejsze od 4000. Porwnaj
wasnoci typu Char oraz Varchar2. Ze wzgldu na optymalizacj, dane tekstowe
zazwyczaj przechowuje si w typie Varchar2. W uytku codziennym uywa si typu Char
raczej sporadycznie i tylko wtedy gdy zachodzi taka konieczno np. wymaganie
biznesowe co do staej dugoci kodw zamwienia.
Long
Posiada wasnoci takie jak VARCHAR2, jednak moe przechowywa do 2 GB tekstu.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 14/140
Inne typy
Raw(L)
Typ zachowujcy si jak CHAR(L), jednak suy do przechowywania danych binarnych.
Long raw
Odpowiednik typu Long, tylko do przechowywania danych binarnych.
Date
Przechowuje informacje o wieku, roku, miesicu, dniu, godzinie, minucie oraz sekundzie.
Timestamp(L)
Typ zbliony do Date. Przechowuje dodatkowo do L miejsc po przecinku sekundy. L nie
moe by wiksze ni 9.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 15/140
Instrukcja SELECT
Instrukcja select suy do pobierania danych z bazy. W poczeniu z funkcjami moe
wykonywa operacje na danych, m.in. obliczenia, formatowa wyniki i tworzy
podsumowania. Pracujemy na poczeniu jako uytkownik HR w ktrego schemacie
istniej tabele z ktrych korzystamy w dalszej czci kursu.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 16/140
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 17/140
NVL
Zdarza si i tak jak w poniszym przykadzie zawarto pl zwrconych przez zapytanie
jest pusta. Moemy wtedy skorzysta z funkcji NVL zamieniajcej puste wartoci na
warto zastpcz. Warto zastpcza musi by tego samego typu, co badana kolumna.
Aliasy kolumn
Czasem zdarza si e nazwy kolumn s mao zrozumiae lub przyjazne dla uytkownika.
W takim wypadku w wyniku zapytania moemy zamieni je na wasne aliasy.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 18/140
Sowo kluczowe distinct moemy rwnie zastosowa dla wielu kolumn. Przyjrzyjmy si
rnicy:
Koniec wyniku ktry wida na grze jest efektem zapytania select manager_id,
department_id from employees. Wywietlona zostaa zawarto tych kolumn z wszystkich
(107) wierszy. Pojawia si wiele powtrze jak np. kombinacja 124 i 50 odpowiednio dla
manager_id oraz department_id. Dodajc sowo distinct sprawiamy e ilo wierszy
zmniejsza si do 28. Dzieje si tak poniewa wywietlane s moliwe kombinacje
wybranych kolumn bez powtrze.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 20/140
Sortowanie
Klauzula order by suy do sortowania wynikw zapytania. Przy zapytaniu bez uycia
ORDER BY ktrego efektem jest wywietlenie nazw departamentw, kolejno sortowania
wydaje si by przypadkowa (nie jest wywietl sobie dla testu niewidoczn domyslnie
pseudokolumn rowid). W rzeczywistoci jest to sortowane wg klucza gwnego, w tym
przypadku kolumny department_id.
Moemy jednak wywietli dane posortowane wg wybranej kolumny. W tym celu dodajemy
do zapytania klauzul order by okrelajc kolumn wg ktrej dane maj by sortowane.
W poniszym przykadzie dane sortowane s wg kolejnoci alfabetycznej treci kolumny
department_name.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 21/140
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 22/140
ASC i DESC
Sposb sortowania moemy okreli poprzez zastosowanie sw ASC oraz DESC
ustanawiajcych kierunek sortowania. Domylnie dla baz Oracle stosowane jest
sortowanie ASC czyli od wartoci najmniejszej do najwikszej. Dzieje si tak nawet kiedy
tego nie okrelimy.
Zapytanie
select department_name from departments order by department_name ;
jest rwnoznaczne z :
select department_name from departments order by department_name asc;
Sortowanie moemy odwrci tak, by wartoci byy malejce przy pomocy sowa DESC:
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 23/140
Operatory
Budujc zapytania do bazy danych Oracle moemy korzysta z operatorw ktre
pozwalaj porwnywa, wykonywa operacje, czenia i porwnania wartoci.
Operatory arytmetyczne
Pozwalaj wykonywa operacje matematyczne na wartociach. Nale do nich:
+ , -, *, /
Operator konkatenacji
||
Operator ten suy do czenia dwu wartoci tekstowych.
Operatory porwna
>, >=, =, <, <=, <>, !=
Operator zakresu
x [NOT] BETWEEN y AND z
Operator ten sprawdza, czy warto x mieci [nie mieci] si w przedziale domknitym
<y,z>
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 24/140
Operator wzorca
x [NOT] LIKE y
Operator ten sprawdza, czy warto napisu x przystaje [nie przystaje] do maski y. Podczas
definiowania maski moemy korzysta ze znakw specjalnych: % zastpuje dowoln
ilo dowolnych znakw, natomiast _ zastpuje dokadnie jeden dowolny znak.
Operator testowania wartoci
x IS [NOT] NULL
Operator ten sprawdza, czy x zawiera [nie zawiera] wartoci NULL.
Operatory logiczne
NOT, AND, OR
Operatory te su do nadawania wicej ni jednego warunku w zapytaniu.
Kade wyraenie arytmetyczne zawierajce cho jeden skadnik lub czynnik z wartoci
pust produkuje pusty wynik.
Poniej przedstawiam zestawienie moliwych wartoci i wyniki przez nie produkowane.
TRUE AND NULL => NULL
FALSE AND NULL => FALSE
TRUE OR NULL => TRUE
FALSE OR NULL => NULL
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 25/140
Priorytety operatorw
Skadowe zoonych wyrae czone s ze sob w kolejnoci zalenej od priorytetw
operatorw. W przypadku operatorw o tym samym priorytecie czenie nastpuje od
lewej strony do prawej.
Domyln kolejno czenia mona zmieni przy pomocy nawiasw (tak jak w
matematyce).
Poniej znajduj si operatory uszeregowane w wiersze wedug priorytetu czenia, od
najwikszego do najmniejszego.
*, /, NOT
+, -, ||
1. <, <=, =, >=, >, <>, !=, IS, IN, BETWEEN, LIKE
AND
OR
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 26/140
Filtrowanie wierszy
Filtrowanie z uyciem operatorw
Wyniki zapyta moemy filtrowa poprzez spenienie warunkw przez poszczeglne
rekordy wyniku. Filtrowanie wykonuje si poprzez zastosowanie sowa WHERE.
Najprostszy przykad:
W wyniku tego zapytania zostan wywietlone tylko departamenty ktrych kod lokacji jest
rwny 1700.
Filtrowa moemy rwnie przy uyciu wymienionych wczeniej operatorw. Oto kilka
przykadw:
Wywietlenie tych departamentw ktrych kod lokacji jest rny od 1700.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 27/140
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 28/140
beetween
Wywietlenie tylko tych pracownikw ktrzy zarabiaj pomidzy 8000 a 12000 $ rocznie.
Like
Do wyraenia LIKE stosuje si dodatkowe operatory: % oraz _
Znak % oznacza dowolny cig znakw dowolnej dugoci.
Znak _ oznacza pojedynczy nieznany znak.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 29/140
Wywietlenie imion tych pracownikw ktrzy maj liter i jako drug w imieniu:
In
Wywietlenie tylko tych departamentw ktre maj jeden z numerw: 10,40,180
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 30/140
Funkcje znakowe
Upper
Zwiksza cay cig tekstowy. Jak wida na poniszym obrazku funkcja upper zostaa
zastosowana do zwikszenia wszystkich liter w wyniku.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 31/140
Lower
zmniejsza wszystkie litery.
Initcap
zwiksza pierwsze litery wszystkich wyrazw z wyniku.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 32/140
Lpad
funkcja uzupeniajca z lewej strony wynik (w tym wypadku zawarto kolumny
department_name) znakami podanymi jako trzeci argument w taki sposb by wynik
osign dugo podan jako parametr 2. Jeli wynik jest duszy ni zdeklarowana
dugo, zostaje ucity z prawej strony.
Rpad
funkcja uzupeniajca z prawej strony wynik (w tym wypadku zawarto kolumny
department_name) znakami podanymi jako trzeci argument w taki sposb by wynik
osign dugo podan jako parametr 2. Jeli wynik jest duszy ni zdeklarowana
dugo, zostaje ucity z prawej strony.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 33/140
Replace
Replace (text, text1 [,text2]) funkcja podmienia wszystkie wystpienia cigu text1 w
cigu text na text2. W przypadku braku cigu text2 z cigu text usuwane s wszystkie
wystpienia cigu text1.
Translate
translate (text, text1 ,text2) funkcja dziaa podobnie jak funkcja replace, tylko e
zamienia wszystkie wystpienia pojedynczych liter z cigu text1 na odpowiednie litery z
cigu text2.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 34/140
Substr
substr (text, m [,n]) wycina z cigu text n znakw poczwszy od pozycji m. Jeeli n nie
jest podane, to wycina wszystkie znaki od pozycji m do koca cigu text. Jeeli m jest
ujemne, to znaki s odliczane od koca cigu text.
Wywietlenie pierwszych czterech znakw nazwiska.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 35/140
Ltrim i Rtrim
RTRIM(text,text2)
LTRIM(text,text2)
Funkcje te usuwaj z prawej lub lewej strony napisu text znaki zawarte w text2. Jeli nie
podamy wartoci text2, usunite zostan spacje ( i w praktyce do tego tych funkcji uywa
si najczciej).
W przypadku powyszym usunite zostay litery wystpujce jako pierwsze od prawej jeli
byy to A, T lub M
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 36/140
to_char
Funkcja to_char w Oracle ma kilka odmian. Moe przyjmowa rne parametry i suy do
rnych czynnoci. Ponisze zastosowanie funkcji to_char odnosi si do zamiany liczb na
posta znakow. Inne formy to_char zostan omwione w dalszych czciach tej
publikacji.
to_char (liczba [,wzorzec]) - zamienia liczb na posta znakow wedug podanego wzorca.
Gdybymy wywietlili roczne wynagrodzenie pracownikw podzielone przez 12
otrzymalibymy w niektrych rekordach mao czytelny wynik:
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 37/140
Element Opis
Przykad
Wynik
999999
1234
099999
001234
$999999
$1234
L999999
z1234
9999.99
1234.00
999,999
1,234
MI
9999MI
1234-
PR
9999PR
<1234>
EEEE
1.2E+03
123400
to_number
to_number (text [,wzorzec]) - zamienia cig znakw na liczb wedug wzorca
zbudowanego podobnie jak powyej.
Funkcja ta jest przydatna gdy w naszej bazie liczby przechowywane s w postaci
tekstowej.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 38/140
Length
length (text) - zwraca dugo cigu text, jeli text ma warto NULL funkcja zwraca NULL,
a nie (jak byoby intuicyjnie) 0.
decode
Select decode (nazwa_kolumny,
warto, zamiennik,
warto2, zamiennik2,
warto domylna) [alias] from nazwa_tabeli.
Funkcja testuje warto w podanej kolumnie i w zalenoci od wartoci mieszczcej si w
pierwszym argumencie zwraca warto podan w drugim argumencie. Jeli nie znajdzie
odpowiedniej wartoci w podanych warunkach, wywietli warto domyln podan jak
ostatni warunek.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 39/140
Funkcje numeryczne
ROUND (x,[,y])
Zaokrgla X do Y miejsca po przecinku. Jeli Y nie zostao podane jest domylnie
ustawiane jako 0.
TRUNC (x,[,y])
Ucina X do Y miejsca po przecinku. Jeli Y nie zostao podane jest domylnie ustawiane
jako 0.
POWER (x,y)
Podnosi X do potgi Y
SQRT(x)
Pierwiastek kwadratowy z X.
SIGN(x)
Zwraca warto 0,1 lub -1 w zalenoci od znaku liczby X
ABS(x)
Warto bezwzgldna liczby X.
MOD(x,y)
Reszta z dzielenia X przez Y. Jeli Y = 0 zwraca X
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 40/140
Daty mona rwnie od siebie odj. Wynikiem bdzie liczba dni pomidzy datami.
Do daty moemy rwnie doda warto i jako wynik uzyskamy dat za podan ilo dni.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 41/140
MONTHS_BETWEEN
Funkcja month_between zwraca ilo miesicy pomidzy datami.
ADD_MONTHS
Dodaje do podanej daty n miesicy.
LAST_DAY
zwraca dat ostatniego dnia miesica zawierajcego podan dat.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 42/140
ROUND
funkcja zaokrgla dat do pnocy, jeli jest przed poudniem lub do pnocy dnia
nastpnego, jeli jest po poudniu. W przypadku podania dodatkowego parametru
zaokrgla dat do penego miesica lub roku. Na poniszych przykadach wida dwa
rodzaje zaokrgle.
TRUNC
funkcja podobna do round, jednak zamiast zaokrgla ucina daty.
Na poniszych przykadach pokazaem ucicie do roku oraz miesica.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 43/140
to_date
to_date (text [,text1]) - zamienia cig znakw text na dat wedug wzorca zawartego w
text1. Wzorzec pozwala poprawnie zinterpretowa znaki zawarte w cigu text.
Opis
YEAR
Rok, sownie
YYYY
Czterocyfrowy rok
YYY
YY
Y
IYY
IY
I
IYYY
RRRR
MM
MON
MONTH
Nazwa miesica
RM
WW
Tydzie w roku.
Tydzie w miesicu.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 44/140
DAY
DD
DDD
HH
HH12
HH24
MI
Minuta (0-59).
SS
Sekunda (0-59).
Dla funkcji to_char stosuje si te same wzorce dat jak dla funkcji to_date.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 45/140
Funkcje agregujce
Funkcje agregujce, to takie funkcje, ktre zwracaj jedn warto wyliczon na
podstawie wielu wierszy. Wszystkie funkcje grupowe ignoruj wiersze zawierajce warto
NULL w kolumnie, na ktrej dziaaj.
AVG
avg ([DISTINCT] wyraenie) funkcja oblicza warto redni wyraenia dla wszystkich
wierszy. W poniszym przykadzie jest to rednia zarobkw pracownikw.
COUNT
count ([DISTINCT] {wyraenie|* }) funkcja zwraca ilo wierszy dla ktrych wyraenie
jest rne od NULL. Uycie gwiazdki powoduje zliczenie wszystkich wierszy w tabeli. W
tym wypadku zostaa wywietlona ilo pracownikw.
MAX
max (wyraenie), min(wyraenie) funkcje obliczaj maksymaln i minimaln warto
wyraenia, warto wyraenia moe by liczb, cigiem znakw lub dat. W poniszym
przykadzie zostay wywietlone najwysza i najnisza paca. W przypadku daty zwraca
najpniejsz, w przypadku tekstu, ostatni cig uszeregowany wg alfabetu.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 46/140
SUM
sum ([DISTINCT] wyraenie) funkcja oblicza sum wartoci wyrae dla wszystkich
wierszy.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 47/140
Grupowanie
group by
Grupowanie polega na podzieleniu zbioru wierszy na grupy, ktre maj pewn wspln
cech. Grupowania dokonuje si w celu zastosowania funkcji agregujcych nie w
stosunku do caego zbioru wierszy, ale do poszczeglnych grup wierszy. W celu
zgrupowania rekordw naley doda now klauzul GROUP BY wraz z
wyspecyfikowaniem kolumny lub wyraenia, wedug ktrego maj by pogrupowane
wiersze. Na licie klauzuli SELECT mog si znale tylko kolumny i wyraenia, wedug
ktrych zapytanie jest grupowane, oraz wywoania funkcji agregujcych.
Przed dokonaniem grupowania mona zastosowa klauzul WHERE, ktra wybierze tylko
cz wierszy z tabeli. Klauzula WHERE wykonuje si przed grupowaniem, a zatem nie
mona w tej klauzuli sprecyzowa warunku zawierajcego funkcje grupowe. Aby taki
warunek zawrze w zapytaniu naley zastosowa dodatkow klauzul HAVING wraz z
odpowiednim warunkiem. Jest ona odpowiednikiem klauzuli WHERE, tylko, e wykonuje
si ona po procesie grupowania. W poniszym przykadzie najpierw wybraem numery
lokalizacji w ktrych id managera nie jest puste. W drugim pogrupowane numery lokalizacji
oraz ilo departamentw w danej lokalizacji ale tylko te w ktrych jest przydzielony
manager. W trzecim tylko te lokalizacje w ktrych poza tym e jest przydzielony manager,
ilo departamentw jest wiksza ni 1.
Rollup
Dodanie rollup do group by spowoduje wywietlenie podsumowania dla kadej grupy.
Poniej przykad grupowania bez uycia rollup. Moemy wywietli sum wypat w danym
departamencie dla ludzi podlegych pod danego managera. Patrz przykad poniej:
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 48/140
Bez funkcji ROLLUP moglibymy wyznaczy sum wypat dla kadego z dziaw tworzc
oddzielne zapytanie, bez grupowania po id managera:
Natomiast jeli zechcemy wywietli podsumowanie wypat dla ludzi podlegych jednemu
managerowi (wraz z nim) ale rwnie podsumowanie dla kadego dziau jednoczenie,
musimy zastosowa rollup:
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 49/140
Cube
Dodanie do instrukcji sowa kluczowego powoduje wygenerowanie podsumowa dla
wszystkich moliwych kombinacji kolumn wymienionych w zapytaniu oraz doczenie
oglnej wartoci sumy. Poniej widzimy pierwsz cz wyniku jaki dao nam
zastosowanie CUBE. Pierwsza cz wyniku nie rni si on od wyniku zwracanego nam
przez zastosowanie ROLLUP.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 50/140
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 51/140
Operatory zbiorowe
Wszystkie operatory zbiorowe dotycz te same zasady:
Kolumny na tych samych pozycjach musz by tego samego typu.
Zapytania musz zwraca t sam liczb kolumn.
Nazwy kolumn w wyniku pobierane s z pierwszego zapytania.
Sortowa mona tylko wynik caoci
UNION ALL
powoduje, e w wyniku zapytania otrzymujemy sum wszystkich wierszy, ktre znajdoway
si w obu zapytaniach skadowych.
UNION
powoduje, e w wyniku zapytania otrzymujemy sum wszystkich wierszy, ktre znajdoway
si w obu zapytaniach skadowych, ale z wyniku kocowego eliminowane s wiersze,
ktre powtarzaj si w obu zbiorach skadowych.
Rnic wida na przykadzie:
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 52/140
INTERSECT
Poczenie za pomoc intersect wywietla tylko te wiersze ktre wystpiy w obu zbiorach
tj. cz wsplna dwch zbiorw.
MINUS
Poczenie przy pomocy minus eliminuje z pierwszego zbioru te rekordy ktre wystpiy w
drugim zbiorze. W tym wypadku wywietlone zostay tylko te osoby ktrych zarobki s
wysze ni 12 000 ale jednoczenie nie pracuj w departamencie numer 90.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 53/140
ZCZENIA
Dane, ktre chcemy uzyska z bazy danych zazwyczaj znajduj si w wicej ni jednej
tabeli bazodanowej. W takim przypadku nasze zapytanie musi si odpowiednio odwoa
do wicej ni jednej tabeli. Mechanizm ten nazywa si w SQL zczeniami.
czenie kartezjaskie
Zapytanie takie zwrci iloczyn kartezjaski wierszy z obu tabel. Zczenia kartezjaskie
stosuje si bardzo rzadko, gdy produkuj bardzo du ilo wierszy, ktre nie zawieraj
logicznie spjnych informacji.
Jeeli w zapytaniu chcemy odwoa si do kolumny, ktra wystpuje w kilku tabelach, to,
aby unikn niejednoznacznoci, odwoanie to musi zawiera nazw kolumny
poprzedzon nazw tabeli. Aby uzyska takie poczenie wystarczy pobra dane z wicej
ni 1 tabeli np. w poniszy sposb:
SELECT * FROM LOCATIONS, DEPARTMENTS;
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 54/140
ZCZENIE WEWNTRZNE
Zczenia kartezjaskie stosuje si niezwykle rzadko. Najczciej, kiedy zadajemy
zapytanie do dwu tabel, zaley nam na uzyskaniu tylko takich kombinacji wierszy z obu
tabel, ktre sobie w jaki sposb odpowiadaj, np. chcemy wywietli nazwiska klientw i
tylko zamwienia przez nich zoone.
Zczenia, ktre zwracaj wanie taki zbir wierszy z obu tabel, ktre sobie w jakim
stopniu odpowiadaj nazywamy zczeniami wewntrznym (inner join).
Aby zrealizowa zczenie wewntrzne w Oracle SQL naley w klauzuli WHERE doda
tzw. warunek zczenia , czyli warunek, w ktrym okrelamy jakie wiersze z obu tabel
odpowiadaj sobie nawzajem. Jeli nadamy tabeli alias, nie bdziemy mogli odnosi si
do niej po nazwie.
W tym przykadzie poniej wywietliem nazwy departamentw w poczeniu z miastami w
ktrych si znajduj na podstawie danych z dwch tabel: departments i locations.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 55/140
ZCZENIA ZEWNTRZNE
W przypadku zcze wewntrznych, jeeli w jednej z tabel istnieje rekord, ktry nie ma
adnego odpowiednika w drugiej tabeli, to rekord ten jest pomijany w kocowym
wyniku.Czasami taka sytuacja nas nie zadowala. W takim wypadku moemy wyrni
jedn z tabel i wykona tzw. zczenie zewntrzne (outer join), aby otrzyma z wyrnionej
tabeli wszystkie rekordy, nawet te, ktre nie maj swojego odpowiednika w drugiej z tabel.
Aby wykona zczenie zewntrzne musimy skorzysta z operatora zczenia
zewntrznego (+). Umieszczamy go w warunku zczenia po nazwie kolumny z tabeli
ktra jest ubosza, czyli tam, gdzie brakuje rekordw i musimy jakie doda. Poniej
widzimy i zostay wywietlone rwnie te lokalizacje do ktrych nie zostay przypisane
adne departamenty.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 56/140
SAMOZCZENIA
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 57/140
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 58/140
NATURAL JOIN
Poniewa tabele departments oraz locations posiadaj pole o tej samej nazwie ktre suy
nam do czenia tych tabel, moemy skorzysta z natural join:
JOIN USING
Identyczne zastosowanie jak NATURAL JOIN ma JOIN USING. W tym przypadku musimy
poda nazw kolumny ktra ma suy jako zczenie. Korzysta z niej moemy jeli w
dwch tabelach ktre chcemy poczy wystpuje wicej ni jedna kolumna o
identycznych nazwach i typie danych.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 59/140
Jest niejako odwrotnie ni ze znaczkiem (+) - jeli do tej pory postawilibymy ten znaczek
po lewej, musimy zastosowa RIGHT OUTER JOIN, natomiast jeli (+) postawilibymy po
prawej, stosujemy LEFT OUTER JOIN.
Konstrukcja z (+):
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 60/140
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 61/140
PODZAPYTANIA
Podzapytanie proste
Podzapytania s bardzo wygodn metod osigania podanego wyniku w jzyku SQL.
Stosujemy je wtedy, gdy w zapytaniu chcemy si odwoa nie do jakiej statycznej
wartoci ale do wyniku zwrconego z innego zapytania.
Podzapytania proste wykonuj si w ten sposb, e najpierw jeden raz wykonuje si
podzapytanie, a nastpnie zwrcone przez nie wartoci s podstawiane do zapytania
zewntrznego i wykonywane jest zapytanie zewntrzne.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 62/140
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 63/140
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 64/140
Podzapytania skorelowane
Dotychczas wynik podzapytania wyliczany by tylko raz. Co prawda np. w ostatnim
przykadzie wynik wyliczenia wykorzystywa zawarto wiersza w zapytaniu nadrzdnym,
ale podzapytanie nie musiao by przeliczane dla kadego wiersza osobno. W przeciwnym
wypadku byoby to zapytanie skorelowane. Najlepiej bdzie to wyjani na przykadach:
SELECT LAST_NAME, SALARY, (SELECT AVG(SALARY) FROM EMPLOYEES)
SREDNIA FROM EMPLOYEES;
Powyszy przykad to zapytanie nieskorelowane. rednia zostaa wyliczona raz i nie ma
nic wsplnego z wierszem w ktrym jest wywietlana. Co innego poniszy przykad.
Wywietlamy nazwisko i wypat pracownika, oraz redni zarobkw ale tym razem nie w
caej firmie a w dziale w ktrym pracuje ten pracownik. Zauwa e podzapytanie poniej
musi niejako sprawdzi jaki jest numer departamentu danego pracownika by mc zosta
wyliczone. Do zewntrznego wiersza zewntrznego zapytania odnosi si poprzez alias.
Takie podzapytanie nazywamy podzapytaniem skorelowanym.
SELECT LAST_NAME, SALARY, (SELECT AVG(SALARY) FROM EMPLOYEES WHERE
DEPARTMENT_ID=E.DEPARTMENT_ID) FROM EMPLOYEES E.
Any i All
Any i All su do porwnywania wartoci ze zbiorem. Przykady poniej:
Wywietlenie tych pracownikw ktrych wypata jest wiksza od wypaty przynajmniej
jednej osoby z departamentu o numerze 100.
select last_name,salary from employees where salary > ANY (select salary from
employees where department_id=100);
Wywietlenie tych pracownikw ktrych wypata jest wiksza od wypaty wszystkich z
departamentu o numerze 100.
select last_name,salary from employees where salary > ALL (select salary from
employees where department_id=100);
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 65/140
select employee_id from employees e where not exists (select manager_id from
departments d where d.manager_id=e.employee_id);
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 66/140
Zarzdzanie transakcjami
Transakcja jest zbiorem operacji wykonywanych w ramach od pocztku sesji lub
poprzedniego zatwierdzenia lub wycofania do aktualnej chwili. Wszystkie operacje na
bazie danych realizowane s w postaci cigu transakcji. Tranzakcyjno zapewnia
zapewnia nam bezpieczestwo i stabiln prac bazy danych. Wszystkie instrukcje w
ramach jednej transakcji zostaj wykonane w caoci lub w caoci zostaj wycofane.
Dziki temu nie powstaje sytuacja w ktrej tylko cz danych modyfikowanych w
przerwanej transakcji zostaje zmieniona.
Dane ktre podlegaj zmianie, s odizolowane od innych uytkownikw i procesw
pracujcych na bazie danych do czasu zakoczenia transakcji.
Instrukcja COMMIT
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 67/140
Instrukcja ROLLBACK
Instrukcja ROLLBACK wycofuje wszystkie modyfikacje danych w ramach jednej transakcji.
Moemy j zastosowa jeli si np. pomylimy. Ta instrukcja nie zadziaa jeli wykonamy
COMMIT. Transakcja w takim wypadku jest ju zakoczona.
Instrukcja SAVEPOINT
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 68/140
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 69/140
Tabele
Tworzenie tabeli
Tworzc tabel podajemy pola jakie ta tabela ma posiada, rodzaj danych
przechowywanych przez te pola oraz wasnoci tabeli
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 71/140
Usuwanie tabeli
Aby usun tabel korzystamy z polecenia drop:
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 72/140
Usuwanie kolumn
Do usuwania kolumn wykorzystujemy DROP COLUMN:
Aby zmieni typ kolumny stosujemy polecenie MODIFY. Typ kolumny zmieni moemy, o
ile dane zawarte w tej kolumnie mog zosta przekonwertowane do nowego typu. Np.
moemy zmieni dugo kolumny, moemy zmieni typ liczbowy w typ tekstowy, ale nie
moemy zmieni typu tekstowego w liczbowy jeli dane zawarte w kolumnie liczbowej nie
s wartociami numerycznymi.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 73/140
Wizy integralnoci
Dziki wizom integralnoci nie mona tak zmodyfikowa danych by straciy on spjno.
S zbiorem zasad naoonych na tabele w bazie danych.
Primary Key
Zapewnia unikalno wartoci w kolumnie. Najczciej zakadany jest na kolumn ktra
przechowuje dane jednoznacznie okrelajce pojedynczy wiersz. W tabeli moe by tylko
jeden klucz gwny. Zapewnia nie wystpowanie wartoci NULL.
Unique
Zapewnia unikalno wartoci w kolumnie, jednak w przeciwiestwie do PRIMARY KEY
takich kluczy moe by wicej ni jeden, oraz umoliwia wystpowanie wartoci NULL.
NOT NULL
Zapobiega wstawianiu wartoci NULL do kolumny.
Check
Zapewnia e warto wstawiana do kolumny spenia wymagany warunek logiczny. Nie
mona w nim wykorzystywa odwoa do innych tabel, funkcji agregujcych, SYSDATE.
Foreign key
Jest to klucz obcy. Suy do definiowania relacji pomidzy tabelami. Zapewnia e rekord w
tabeli podrzdnej zawsze bdzie mia swojego odpowiednika w tabeli nadrzdnej. Klucz
obcy musi si odwoywa do kolumny (kolumn) w tabeli nadrzdnej, na ktrych zaoony
jest UNIQUE lub klucz gwny.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 74/140
Zakadanie konstraintw
Wizy moemy zakada na dwa sposoby. Przy tworzeniu tabeli, oraz nakadajc je na ju
istniejc tabel. Poniej przykad zakadania wizw ju przy tworzeniu tabeli:
Wyjtek od reguy stanowi NOT NULL. Wasno NULL/NOT NULL ustawiamy poprzez
zmian stanu kolumny:
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 75/140
Usuwanie konstraintw
Aby zdj z tabeli konstraint musimy skorzysta z polecenia drop podajc nazw klucza.
Poniej usuwam wszystkie konstrainty z tabeli pilkarze.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 76/140
Widoki
Jeli czsto wykonujemy jakiej zapytanie do bazy danych, np. z uyciem wielu tabel lub po
prostu dugie, moemy zdefiniowa widok. Korzystanie z niego bdzie o wiele
wygodniejsze. Moemy pobiera z niego dane jak ze zwykej tabeli. Nagle dugie
zapytanie z wieloma parametrami do ktrego czsto trzeba co dodawa moemy
zamieni w mniej wicej co takiego:
SELECT * FROM NAZWA_WIDOKU
Widoki s strukturami cakowicie dynamicznymi, tzn. zapytanie, ktre je definiuje w
momencie definicji jest tylko sprawdzane pod wzgldem poprawnoci skadniowej i
semantycznej, natomiast nie jest wykonywane. Zapytanie to jest wykonywane w
momencie odwoywania si do widoku.
Widoki maj te zastosowanie w przypadku nadawania uprawnie. Moemy chcie
udostpni uytkownikowi tylko cz danych, lub cz kolumn z tabeli. W takim
wypadku tworzymy widok o zadanych waciwociach, a uytkownikowi zezwalamy na
dostp do widoku a nie tabeli.
Tworzenie widokw
CREATE [OR REPLACE] [FORCE] VIEW NAZWA_WIDOKU AS
TRE_ZAPYTANIA [ WITH READ ONLY] [WITH CHECK OPTION]
Aby stworzy widok, naley mie uprawnienia do wszystkich obiektw do ktrych odnosi
si widok.
OR REPLACE
Dziki tej klauzuli w przypadku gdyby widok o takiej nazwie ju istnia zostanie nadpisany
przez wanie tworzony.
FORCE
Wymusza stworzenie widoku nawet jeli zapytanie bdce podstaw widoku jest
niepoprawne (np. odnosi si do tabeli ktra jeszcze nie istnieje).
WITH READ ONLY
W niektrych przypadkach mona stosowa instrukcje DML na widokach, ta instrukcja
nawet jeli formalnie byoby to moliwe, uniemoliwia to.
WITH CHECK OPTION
Ta opcja sprawia, e w przypadku (jeli to moliwe dla danego widoku) nie mona wrzuci
danych albo zmieni ich w taki sposb e nie bd widoczne w tym widoku.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 77/140
Update
Widok nie moe by oparty na wielu tabelach
Nie moe zawiera klauzuli DISTINCT
Nie moe zawiera GROUP BY ani funkcji grupowych
Nie moe zawiera skorelowanych zapyta
Wyrae w kolumnie
Delete
Widok nie moe by oparty na wielu tabelach
Nie moe zawiera klauzuli DISTINCT
Nie moe zawiera GROUP BY ani funkcji grupowych
Nie moe zawiera skorelowanych zapyta
Insert
Widok nie moe by oparty na wielu tabelach
Nie moe zawiera klauzuli DISTINCT
Nie moe zawiera GROUP BY ani funkcji grupowych
Nie moe zawiera skorelowanych zapyta
Wyrae w kolumnie
Tabela, na ktrej oparty jest widok zawiera kolumn NOT NULL bez wartoci
domylnej, i kolumna ta nie jest odwzorowana w widoku.
Jeeli widok zostanie utworzony z klauzul WITH CHECK OPTION, to nie bdzie
mona wstawi do niego adnego wiersza, ktry nie byby pniej widoczny w tym
widoku.
Usuwanie widokw
DROP VIEW NAZWA_WIDOKU;
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 78/140
Sekwencje
Tworzenie sekwencji
Sekwencja jest obiektem podajcym kolejne wartoci wg ustalonych kryteriw. Sekwencje
stosujemy czsto w celu tworzenia kluczy gwnych tabel. Po co przy wstawianiu
kolejnych wierszy podawa rcznie kolejny numerek po ktrym dany wiersz bdziemy
identyfikowa? atwo si przy tym pomyli i wstawi numer ktry ju istnieje, a poza tym
wie si to z do uciliwym sprawdzaniem ostatniego numerka. Niech zrobi to za nas
automat!
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 79/140
Increment by
Okrela warto o jak ma si zmienia aktualny stan sekwencji po kadym pobraniu
danych. Jako parametr tego polecenia moemy rwnie poda liczb ujemn. Warto
sekwencji bdzie wtedy male.
Rzadziej uywanymi opcjami sekwencji s cycle oraz cache.
Cycle / nocycle
Parametr ten okrela czy sekwencja moe si przekrci (jak licznik w samochodzie) i
rozpocz naliczanie od pocztku.
Cache / nocache
klauzula CACHE wcza wykonywanie pre-alokacji numerw sekwencji i przechowywanie
ich w pamici, co skutkuje zwikszeniem szybkoci generacji kolejnych liczb. Klauzula
NOCACHE wycza t moliwo. Domylnie przyjmowane jest CACHE 20. Warto
podana w CACHE musi by mniejsza ni MAXVALUE - MINVALUE
Order / noorder
Klauzula ORDER gwarantuje, e kolejne liczby bd generowane w porzdku jakim
otrzymane zostay przez system polecenia ich generacji. Klauzula NOORDER wycz t
wasno.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 80/140
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 81/140
Usuwanie sekwencji
Aby usun stworzon sekwencj naley wykorzysta polecenie drop o nastpujcej
kontrukcji:
DROP sequence nazwa__sekwencji;
jak to wida poniej.
Modyfikacja sekwencji
Aby zmieni lub nada jaki parametr istniejcej sekwencji stosujemy konstrukcj:
ALTER SEQUENCE NAZWA_SEKWENCJI NAZWA PARAMETRU {WARTO};
Nie moemy tylko zmieni parametru START WITH co wida wraz z przykadami
prawidowego zastosowania ALTER SEQUENCE na poniszym obrazku:
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 82/140
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 83/140
Bloki anonimowe
Bloki anonimowe nie posiadaj nazwy. Mona je stworzy w celu jednorazowego
wykonania kodu, jednak taki blok w przeciwiestwie do procedur, funkcji lub wyzwalaczy
nie bdzie przechowywany w bazie danych. Najprostsza posta bloku anonimowego
przestawiona jest na poniszym zdjciu. Blok zaczyna si od sowa begin a koczy na
end. Jeli w takim bloku nie wykonujemy adnych operacji, musimy wstawi przynajmniej
swko null ze rednikiem, lub zamiast tego commit. W tym drugim przypadku bdzie to
jednak miao wpyw na transakcje.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 84/140
Procedury
S to podobnie jak funkcje i wyzwalacze bloki PL/SQL posiadajce nazw. Procedury s
przechowywane w bazie danych. Na poniszej ilustracji wida najprostsz form
procedury. Zasadniczo do konstrukcji bloku anonimowego dodajemy linijk
CREATE OR REPLACE PROCEDURE NAZWANA IS
Klauzuli OR REPLACE tak naprawd nie jestemy zobowizani stosowa, chroni nas
ona jednak przed bdem w przypadku gdyby procedura o takiej nazwie ju istniaa w
naszych schemacie bazodanowym. Dodajc OR REPLACE, w przypadku gdyby taka
procedura ( posiadajca tak nazw i ilo oraz typ parametrw jeli takie wystpuj ) ju
istniaa, zostanie nadpisana now, wanie kompilowan. Poniej przedstawiam efekt
prby stworzenia procedury o zajtej ju nazwie bez klauzuli OR REPLACE :
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 85/140
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 86/140
Funkcje
Funkcje s rwnie nazwanymi blokami PL/SQL. Funkcje MUSZ zwraca wynik, w
przeciwiestwie do procedur. Tak jak procedury i wyzwalacze s przechowywane na
serwerze. Poniej przedstawiam przykad prostej funkcji funkcji. Po CREATE OR
REPLACE FUNCTION NAZWA_FUNKCJI nastpuje deklaracja typu zwracanej wartoci.
Powysza funkcja tylko i wycznie zwraca sowo test. Moemy si do niej odwoa aby
uzyska wynik:
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 87/140
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 88/140
Wyzwalacze
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 89/140
o tyle nie moemy jej wywoa w zapytaniu SQL. Funkcje wywoa mona przy pomocy
zapytania SQL:
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 90/140
Funkcja musi zwraca jak warto. Dziki temu jestemy w stanie wypisa wynik jej
dziaania na ekranie, lub go przetworzy.
Funkcje moemy rwnie wywoywa wewntrz innych blokw PL/SQL pod warunkiem
jednak, e jej wynik zostanie przypisany do zmiennej:
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 91/140
Zmienne i stae
Zmienne i stae definiujemy z sekcji DECLARE bloku PL/SQL. Wyjanienie
poszczeglnych przykadowych zmiennych i staych znajduj si pod ponisz ilustracj.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 93/140
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 94/140
Instrukcje sterujce
IF THEN
Instrukcja IF THEN pozwala wykonywa rne dziaania w zalenoci od okrelonych
warunkw.
Wykorzystujc j, moemy okreli np. e jeli warto zmiennej wynosi X program ma
wykona dziaanie A, a jeli warto zmiennej wynosi Y, program ma wykona dziaanie B.
Poniej przedstawiam przykad najprostszej formy tej instrukcji:
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 95/140
Kolejne warunki dodajemy stosuj ELSIF . THEN. Program bdzie sprawdza kolejne
warunki do czasu a nie natrafi na taki ktry bdzie speniony. Nie bdzie ju wtedy
sprawdza kolejnych warunkw, jeli chcemy by mimo spenienia jednego warunku kolejne
byy sprawdzane, musimy zastosowa wielokrotnie konstrukcj IF. Jeli aden warunek nie
zostanie speniony, wykonane zostan instrukcje nastpujce po klauzuli ELSE.
Stosowanie klauzuli ELSE nie jest obowizkowe.
CASE
Instrukcja CASE ma dwie formy o dwch rnych zastosowaniach. Pierwsza o ktrej pisz
suy do takich zastosowa jak IF THEN. Poniej przedstawiam program o takiej samej
zasadzie dziaania jak przykad z rozdziau o IF THEN, jednak korzystam z instrukcji
CASE. Podobnie jak w instrukcji IF THEN warunki s sprawdzane do momentu
dopasowania. Po klauzuli WHEN podajemy warunek logiczny
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 96/140
Ptle
Kiedy potrzebujemy jak czynno wykona wielokrotnie, stosujemy ptle. Najprostsz
ptl jest ptla LOOP.
LOOP
Prezentowana niej ptla nie posiada warunku wyjcia, bdzie si wykonywa w
nieskoczono lub do momentu wystpienia jakiego bdu jak to wida w logu.
Powtarzane s instrukcje znajdujce si pomidzy klauzulami LOOP oraz END LOOP.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 97/140
Aby ptla moga si kiedy zakoczy, musimy poda jej warunek wyjcia w jednej z
dwch form. Korzystajc z klauzuli EXIT WHEN:
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 98/140
WHILE
Ptla WHILE dziaa podobnie do ptli LOOP. W tym przypadku najpierw podajemy
warunek wyjcia. Z oraclowego na nasze ponisza konstrukcja oznacza do czasu a
zmienna x jest mniejsza ni 20, wykonuj nastpujce czynnoci. Musimy zwrci uwag
by warunek zosta speniony, inaczej ptla nam si zawiesi.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 99/140
Po klauzuli WHILE podajemy warunek ktry okrela stan dla ktrego ptla ma by
wykonywana. Czstym bdem jest wstawianie tutaj warunku ktry ma spowodowa
wyjcie. Dziaa to nieco na opak i warto zwrci na to uwag. T ptl mona rwnie
przerwa przy pomocy polecenia EXIT lub znanego ze zwyczajnej ptli LOOP warunku
EXIT WHEN.
Ptla FOR
Ptl t stosuje si gdy wiemy ile dokadnie razy ma zosta wykonana. Moemy dokadnie
okreli liczb jej powtrze. Mona ten sam efekt uzyska rwnie przy pomocy ptli
WHILE lub LOOP stosujc iterator i warunek wyjcia, ale taka konstrukcja byaby znacznie
mniej czytelna i a prosi si o problemy z tego powodu e musiaby by zastosowany
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.
100/140
jeden warunek wymagany dla tych ptli, oraz drugi od ktrego w rzeczywistoci
uzalenialibymy zakoczenie powtrze ptli.
W poniszym przykadzie zaprezentowaem ptle typu FOR ktra ma zosta wykonana 6
razy. Prosz zauway, e zmienna iterator ktra powiksza si po kadym obrocie ptli
nie jest wczeniej deklarowana. Zasig tej zmiennej to wycznie ptla i nie moemy si
do niej odnosi poza blokiem ptli.
Ponownie z oraclowego na nasze : for iterator in 1..6 loopoznacza dopki zmienna o
nazwie iterator ma warto zawart w zbiorze od 1 do 6 wykonuj ponisze czynnoci.
Iterator zwiksza si o jeden przy kadym cyklu.
(!) Kolejny czsto popeniany bd: podawanie zakresu poczynajc od wartoci wikszej.
Taka deklaracja spowoduje e ptla nie wykona si ani razu. Program zostanie
skompilowany i programista nie zostanie poinformowany o tego typu bdzie, dlatego o
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.
101/140
Zmienne rekordowe
Rekord jest struktur przypominajc obiekt lub wiersz w tabeli. Rekord posiada wasne
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.
102/140
pola przechowujce dane. Aby korzysta z takiej zmiennej, musimy najpierw zdefiniowa
jej struktur w sekcji DECLARE bloku PL/SQL.
Definicja rozpoczyna si od sowa TYPE, nastpna jest nazwa nowego typu, musimy te
pamita o dodaniu klauzuli is record. Pomidzy nawiasami podajemy kolejne zmienne
wraz z ich typami, bdce skadowymi rekordu. Pomidzy nimi stawiamy przecinki, po
ostatniej zmiennej nie stawiamy go.
Posiadajc ju zdefiniowan struktur rekordu, moemy stworzy zmienn nowo
stworzonego typu.
Robimy to tak ja przy zmiennych standardowych typw podajc nazw stworzonej
zmiennej a nastpnie nazw nowo stworzonego typu. Musimy pamita, by deklaracja
zmiennej nowego typu nastpowaa po definicji tego typu.
Odwoujc si do pl zmiennej rekordowej stosujemy notacj kropkow. Podajemy nazw
zmiennej rekordowej, a nastpnie po kropce nazw pola do ktrego si odnosimy.
Atrybut %ROWTYPE
Atrybut %ROWTYPE stosuje si przy definiowaniu typw rekordowych. Dziaa w sposb
zbliony jak atrybut %TYPE jednak dla zmiennych zoonych. Dziki temu atrybutowi
jestemy w stanie zadeklarowa zmienn rekordow o konstrukcji opartej o konstrukcj
tabeli, kursora lub innej zmiennej rekordowej.
Parametry pl rekordu
Podobnie jak w przypadku zmiennych prostych, take i w przypadku pl rekordu moemy
stosowa takie parametry jak DEFAULT, NOT NULL. Na poniszym przykadzie
zaprezentowaem zastosowanie obu. Dosza nam jeszcze jedna moliwo pole rekordu
moe samo by rekordem!
Mamy wic moliwo stworzenia tablicy wielowymiarowej. W poniszym przykadzie
zdeklarowaem pole moj_rekord bdce rekordem utworzonym na podstawie struktury
wiersza tabeli jobs.
W powyszym przykadzie wstawiem nowy wiersz do tabeli jobs, a przy pomocy klauzuli
RETURNING INTO uzyskaem ID wstawionego wiersza. Warto ID zostaa przypisana do
zmiennej ID ktrej typ zosta zdeklarowany na podstawie typu kolumny job_id z tabeli jobs.
Taka moliwo nabiera ogromnego znaczenia, jeli warto wstawiana do kolumny
klucza gwnego pochodzi z sekwencji, a mamy zamiar operowa na wanie wstawionych
danych.
Widoczna na przykadzie instrukcja dbms_output.put_line to w rzeczywistoci procedura
put_line zawierajca si w pakiecie dbms_output a suca do wypisywania danych na
ekran.
Na poniszej ilustracji wida efekt dziaania tej procedury. Aby wczy widok na ktrym
widoczne bd komunikaty takie jak poniszy, naley przej do menu View i klikn
DBMS_Output, a nastpnie w widocznym niej oknie klikn krzyyk i wybra waciwe
poczenie.
Kursory
Kursory s encj w ktrej przechowywane s wiersze zwrcone przez zapytanie z bazy
danych.
Przetwarzajc kursory wykonujemy cztery operacje:
zadeklarowa kursor
otworzy go
pobra wiersze
zamkn kursor
Deklaracja kursora
Kursor deklarujemy w sekcji DECLARE bloku PL/SQL
Skada si on z podania nazwy kursora oraz zapytania na podstawie ktrego maj zosta
do kursora wcignite dane.
Otwarcie kursora
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr. 110/140
Zamknicie kursora
Kursor zamykamy przy pomocy poniszej konstrukcji. Zamknitego kursora nie moemy
ju przetwarza.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 111/140
Atrybuty kursora
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr. 112/140
Ptla kursorowa
Stosowanie konstrukcji ujtej w poprzednim rozdziale nie jest najwygodniejszym
rozwizaniem w praktyce. Zaprezentowaem je by zapozna czytelnika z mechanizmami
zwizanymi z kursorami i pomc zrozumie zasady ich dziaania. Ptla kursorowa jest
konstrukcj znacznie prostsz, nie musimy sprawdza czy jeszcze s jakie dane do
pobrania ani otwiera i zamyka kursora ani te deklarowa zmiennej typu wierszowego
by do niego pobra dane.
Ponisza ptla wykona si tyle razy ile bdzie wierszy w kursorze. Ponisza ptla pobierze
po kolei wszystkie wiersze z kursora i wrzuci je do zmiennej rekordowej stworzonej na
podstawie konstrukcji tabeli employees z ktrej dane pobieram do rekordu. Zmienna emp
zostaa tutaj zdefiniowana dwa razy. Zmienna emp zdeklarowana w sekcji declare jest
widoczna dla caego bloku. Zmienna emp nastpujca po sowie for jest zmienn
deklarowan niejawnie w zwizku z tworzeniem ptli kusorowej. Tak wic wewntrz ptli
ilekro odwoamy si do zmiennej emp - bdziemy odwoywa si do zmiennej
zdeklarowanej niejawnie. Zmienna zdeklarowana w sekcji declare zostanie przesonita.
Poza ptl kursorow nie jestemy w stanie odwoa si do zmiennej zdeklarowanej
niejawnie w ptli.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr. 113/140
Kursory sparametryzowane
Na pierwszy rzut oka kursory wydaj si by przyjemne i wygodne w uyciu. Jest jeden
problem
Przy wiedzy ktr dotychczas posiadamy nie moemy zmienia zapytania na podstawie
ktrego tworzony jest kursor. A co jeli zechcemy zmieni parametr w warunku WHERE
zapytania?
Kursory parametryzowa mog na dwa sposoby. Poprzez zmienn lub poprzez parametr.
Oba zaprezentowaem na poniszym przykadzie. Pierwszy z kursorw pobiera warto do
warunku where ze zmiennej ktrej warto ustalam przed otwarciem kursora. Drugi
otrzymuje t warto jako parametr uruchomieniowy przy otwieraniu kursora. Dlaczego to
istotne? Dziki temu moemy napisa jeden generyczny program narzdziowy ktry
mona wykorzystywa wielokrotnie, zamiast dublowa ten sam kod ze zmienionym
jednym parametrem.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr. 114/140
Wyjtki - omwienie
Wyjtki wystpuj kiedy uytkownik prbuje wykona polecenie ktrego nie moe
zrealizowa serwer. Kady wyjtek ma swj numer i opis, jest ich kilka tysicy. Przykady
kiedy moe wystpi wyjtek:
uytkownik nie ma uprawnie do obiektu do ktrego si odwouje
dzielenie przez zero
naruszenie wizw integralnoci
Instrukcja podczas ktrej wystpi wyjtek nie zostanie wykonana. Jeli dodatkowo inne
instrukcje objte s t sam transakcj, rwnie zostan wycofane.
Informacja o wystpieniu wyjtku zwracana jest do sesji uytkownika i np. wywietlana
przez konsol. Na poniszym przykadzie wystpi wyjtek ORA-06502 spowodowany
prb przypisania wartoci tekstowej do zmiennej liczbowej.
Jako programici moemy obsugiwa wyjtki tj. definiowa dziaania bdce reakcj na
okrelony wyjtek. Nie moemy tego zrobi w trakcie dziaania programu, musimy
przewidzie moliwo wystpienia wyjtku i tak przygotowa program by potrafi go
obsuy.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr. 115/140
Wyjtki predefiniowane
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr. 116/140
Obsuga wyjtkw
Wyjtki obsugujemy w sekcji EXCEPTION ktra nie pojawia si jeszcze we
wczeniejszych przykadach. Sekcja EXCEPTION musi znajdowa si pomidzy BEGIN i
END. Po klauzuli WHEN podajemy nazw wyjtku a nastpnie THEN i instrukcje ktre
maj zosta wykonane w przypadku wystpienia wyjtku. Moemy rwnie zdeklarowa
reakcj na wystpienie pozostaych wyjtkw ktrych wczeniej nie uwzgldnilimy przy
pomocy klauzuli OTHERS.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr. 117/140
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr. 118/140
Propagacja wyjtkw
W przypadku blokw zagniedonych, jeli wystpi bd w najgbiej osadzonym bloku,
sprawdzana jest obsuga bdu w sekcji EXCEPTION danego bloku. Jeli ten wyjtek
bdzie w nim obsugiwany, bd nie zostanie przekazany do bloku wyszego poziomu i
wysze bloki bd zachowywa si tak, jakby ten wyjtek nie wystpi. Jeli jednak
wyjtek nie bdzie obsugiwany w bloku w ktrym wystpi, zostanie przekazany blok
wyej celem sprawdzenia czy tam ten bd jest obsugiwany. Bdzie si tak dziao do
momentu kiedy obsuga danego bdu nie pojawi si w ktrym z poziomw
zagniedenia.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr. 119/140
Podczas deklarowania parametrw dla procedury lub funkcji nie ma sztywnych ogranicze
co do ich iloci oraz kolejnoci. Parametry mog zadeklarowa na kilka rnych sposobw
i poniej omawiam to na przykadach:
wejsciowy1 parametr wejcia typu varchar2, nie posiada wartoci domylnej i dlatego
przy wywoywaniu podprogramu bd zmuszony j poda.
wejsciowy2 oraz wejsciowy3 - dwa sposoby zadeklarowania wartoci domylnej dla
parametru. Jeli nie przypisz adnej wartoci, przypisana zostanie automatycznie
warto wystpujca po DEFAULT lub znaku przypisania. Podczas wywoywania
podprogramu nie musz podawa wartoci do tego parametru.
wejsciowy4 poniewa nie okreliem jaki ma to by typ parametru, Oracle domylnie
przyjmuje e jest ot parametr typu IN.
wejsciowy5 parametr typu wejciowego numerycznego ktry bd musia uzupeni przy
wywoywaniu procedury.
wyjsciowy parametr wyjciowy typu number. Nie mog okreli dla niego wartoci
domylnej, ani wartoci wejciowej przy wywoaniu programu. Mog to zrobi jedynie
wewntrz podprogramu.
dwustronny parametr do ktrego nie mog przypisa wartoci domylnej przy
wywoywaniu podprogramu. Mog poda do niego warto podczas wywoywania
podprogramu.
Mog okrela typ parametru, nie mog natomiast dugoci. Zamiast wic stosowa
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.
121/140
Pakiety - podstawy
Pakiety s logicznym zbiorem obiektw takich jak podprogramy, typy, wyjtki, kursory.
Skadaj si z czci specyfikacji oraz implementacji. W czci specyfikacji deklarujemy
jedynie co ma zawiera pakiet, a w czci implementacji ciaa deklarowanych obiektw.
Jeli wic w czci specyfikacji deklarujemy e pakiet zawiera ma procedur
procedura1 z dwoma parametrami typu number, to w czci implementacji musimy
okreli dokadnie jak ta procedura dziaa, a wic cao jej kodu.
Moe istnie deklaracja obiektu np. procedury w czci specyfikacji bez rozwinicia w
czci implementacji, ale nie moe by odwrotnie. Obiekty w pakiecie mog zasadniczo
wystpowa w dowolnej kolejnoci, poza sytuacj gdy procedura A odnosi si do
procedury B w takim wypadku procedura A musi by zadeklarowana wczeniej.
Przystpujc do tworzenia pakietu musimy najpierw zdeklarowa elementy z ktrych
pakiet ma si skada. Robimy to w czci specyfikacji:
Na razie definiujemy jedynie jakie elementy maj si znale w pakiecie, oraz jakie
parametry maj przyjmowa i zwraca procedury i funkcje.
Przechodzimy teraz do opisania sposobu dziaania funkcji i procedur tj. czci Body
pakietu.
Zapowied procedur i funkcji ktra pojawia si w czci specyfikacji pakietu, jest teraz
rozwijana o implementacj. Kada procedura i funkcja ktra pojawia si w poprzednim
przykadzie jest teraz napisana w caoci. Wszystkie nazwy i typy parametrw s
identyczne.
Nastpnym krokiem byo rozbudowanie czci implementacji pakietu o ciao nowej funkcji
jMog teraz wykorzysta obie wersje funkcji, a to ktra z nich zostanie uyta zalee
bdzie od iloci podanych parametrw:
Chciabym teraz aby do nowej zmiennej podczas inicjalizacji pakietu (czyli wtedy gdy po
raz pierwszy w danej sesji odwouj si do jakiego skadnika pakietu) zostaa przypisana
dynamiczna warto w tym wypadku pochodzca z jednej z funkcji tego pakietu.
W tym celu musz uzupeni sekcj inicjujc pakietu. Wykonuj to poprzez dodanie
polece ktre maj zosta wykonane przed kocem treci pakietu, poprzedzajc je
sowem BEGIN.:
Wyzwalacze
Wyzwalacze obiektowe
Wyzwalacze s podprogramami wywoywanymi jako reakcja na pewne zdarzenie na
obiekcie bazy danych. Przykadowo tworzc wyzwalacz moemy okreli jakie dziaanie
ma podj w przypadku gdyby uytkownik wprowadzi dane do wybranej tabeli.
Triggery s znakomitym narzdziem do logowania zdarze w systemie. Moemy stworzy
wasn tabel z logami, nastpnie wyzwalacze ktre bd do tej tabeli wstawia kolejne
wiersze w zalenoci od dziaa na obiektach bazy danych.
Tworzenie wyzwalaczy
Oglna konstrukcja tworzenia wyzwalaczy wyglda w taki sposb:
CREATE OR REPLACE TRIGGER nazwa_triggera
BEFORE/AFTER
DELETE/UPDATE/INSERT/INSERT OR UPDATE OR DELETE
ON nazwa_tabeli
instrukcje ktre maj zosta wykonane.
W poniszym przykadzie utworzyem wyzwalacz ktry przed wprowadzeniem wiersza do
tabeli JOBS ma wywietli na konsoli wiadomo kto wstawi wiersz do tabeli jobs!!
Od tego momentu, za kadym razem gdy bdzie wstawiany wiersz do tabeli jobs zostanie
wywoany wyzwalacz CUSTOM. Dziaania w nim opisane bd wykonywane PRZED
wprowadzeniem danych do tej tabeli, poniewa uyem klauzuli BEFORE.
Ponisza ilustracja prezentuje efekt dziaania wyzwalacza. Wprowadziem wiersz do tabeli
jobs, a Oracle wywoa mj wczeniej stworzony wyzwalacz ktry wypisa na konsoli
wiadomo.
Wyzwalacze wierszowe
Istnieje moliwo modyfikowania danych przez wyzwalacz, zanim te zostan wstawione
do tabeli, lub zanim wiersz w tabeli zostanie zmieniony tymi danymi.
Moemy wykona takie dziaania, poniewa istniej dwie zmienne :new oraz :old
zawierajce cay modyfikowany, dodawany lub usuwany wiersz. Korzystajc z tych
zmiennych moemy przed wstawieniem danych do tabeli pobra je, zmodyfikowa, a
nastpnie wstawi ju zmienione dane.
Aby mc korzysta ze zmiennych :new i :old musz doda dodatkow klauzul FOR
EACH ROW do definicji wyzwalacza.
Na poniszym przykadzie prezentuj przykad modyfikacji danych wstawianych do tabeli.
Musimy pamita, by takie operacje jak modyfikacje wstawianych danych wykonywa w
wyzwalaczu uruchamianym PRZED zdarzeniem, a nie po.
Nakadajc wyzwalacz na UPDATE tabeli mam rwnie dostp do zmiennej :old. Zawiera
ona zmieniany wiersz w postaci w jakiej wystpowa przed modyfikacj. Mog wic
okreli jak zmieniana nazwa stanowiska brzmiaa przed, a jak po zmianie wiersza:
Predykaty w wyzwalaczach
Jeden wyzwalacz moe reagowa na wicej ni jedno zdarzenie na obiekcie. Wystarczy
doda kolejne warunki w definicji wyzwalacza. W poniszym przykadzie widoczny jest
wyzwalacz ktry zareaguje na insert, update oraz delete.
Wygodnie jest mie jeden wyzwalacz przypisany do tabeli, jednak musz w takim
wypadku mie moliwo rozrnienia jakie polecenie zostao wykonane na tabeli.
Rozrniam je dziki predykatom INSERTING,DELETING,UPDATING. Predykaty mog
stosowa w warunkach takich jak IF, a dziki temu wykonywa rne operacje w
zalenoci od tego jaka instrukcja zostaa wykonana.
Poniewa w tym widoku znajduj si dane pochodzce z dwch tabel, nie mog na nim
wykona operacji delete i musz zastosowa wyzwalacz typu instead-of.
Dane pochodzce z widoku:
Poniszy kod najpierw sprawdza ile jest departamentw w danej lokalizacji, a nastpnie w
zalenoci od tego ile znajduje si departamentw w tej lokalizacji usuwa tylko
departament, lub departament i lokalizacj. Uwaga: poniewa tabela locations powizana
jest kluczem obcym z tabel countries, przed wykonaniem poniszego wyzwalacza
naleaoby poszerzy kod o sprawdzanie zalenoci w tabeli countries. Poniszy przykad
ma charakter pokazowy, dodawanie dodatkowego kodu sprawioby e przykad przestaby
by czytelny.
wiczenia
Podstawowe narzdzia i istrukcja SELECT
1. Podcz si jako uytkownik hr do lokalnej bazy.
2. Uruchom zapisywanie tego co si dzieje na ekranie do pliku.
3. Wywietl struktur tabeli departments.
4. Zatrzymaj zapisywanie do pliku i sprawd co zawiera plik.
5. Stwrz plik ktry zawiera polecenie opisania tabeli.
6. Wykonaj polecenie z pliku.
7. Rozcz si z baz bez zamykania okna programu.
8. Wywietl ca zawarto tabeli departments.
9. Wywietl tylko nazwy departamentw z tabeli departments.
10. Wywietl tylko zawarto kolumn state_province i city z tabeli locations w taki sposb
by tam gdzie state_province jest puste w miejsce bez wartoci zosta wstawiony tekst
"brak" a nazwa kolumny w wyniku bya "lokalizacja"
11. Wywietl bez powtrze id wszystkich departamentw z tabeli employees i posortuj je
malejco.
PL SQL kursory
68. Stwrz kursor ktry pobierze dane o pracownikach zarabiajcych wicej ni rednia
zarobkw w firmie, a nastpnie wywietli na konsoli ich imiona, nazwiska, wypat
oraz rednia zarobkw w firmie.
69. Stwrz kursor sparametryzowany, ktry wywietli na ekranie wszystkich
pracownikw managera o id podanym jako parametr kursora.
Dla ambitnych
70. Stwrz procedur. Zadeklaruj tablic obiektw o strukturze pl takiej jak rekord
w tabeli departments. Stwrz kursor ktry pobierze wszystkie dane z tabeli
departments, a nastpnie umieci je w tablicy.
PL SQL wyjtki
71. Stwrz blok anonimowy wywietlajcy na konsoli wynik dzielenia 2 zmiennych.
Obsu bdy ktre mog si pojawi w trakcie dziaania programu.
Dla ambitnych
72. Napisz blok anonimowy ktry wywietli liczby parzyste z zakresu -10 do 40. Obsu
wyjtek ktry si pojawi.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.
138/140
PL SQL pakiety
79. Stwrz pakiet ktry bdzie "sercem" prostego programu kadrowo - pacowego.
Pakiet nazwij hrmanager.
80. Do pakietu hrmanager dodaj funkcj ktra zwrci najwiksze zarobki w caej firmie.
81. Do pakietu hrmanager dodaj procedur o nazwie "srednia" ktra pobiera jako
parametr id dziau. Procedura powinna wywietli na konsoli redni zarobkw w
dziale o id takim jak przyjty parametr.
82. Do pakietu hrmanager dodaj procedur o nazwie "srednia" ktra pobiera jako
parametry id dziau oraz id managera. Procedura powinna wywietli na konsoli
redni zarobkw w dziale o id takim jak przyjty pierwszy parametr, ale tylko tych
osb ktre s podwadnymi managera o numerze podanym jako parametr drugi.
Dla ambitnych
83. Do pakietu hrmanager dodaj procedur o nazwie "srednia" ktra pobiera jako
parametry nazw dziau oraz nazwisko managera. Procedura powinna wywietli
na konsoli redni zarobkw w dziale o nazwie takiej jak przyjty pierwszy
parametr, ale tylko tych osb ktre s podwadnymi managera o nazwisku podanym
jako parametr drugi. Procedura powinna wywietla na konsoli informacj, jeli w
wyniku zapytania zostanie zwrcone 0 wierszy.
84. Zdeklaruj w pakiecie wasny typ rekordowy zawierajcy dwa pola: imi i nazwisko.
Stwrz do tego procedur ktra bdzie przyjmowaa jako parametr wejciowy
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.
139/140
zmienn tego typu a nastpnie witaa si z osob ktrej dane zostan przekazane
przez zmienn.
PL SQL wyzwalacze
85. Stwrz tabel logs zawierajc pola info typu varchar2(100), czas typu date. Stwrz
wyzwalacz ktry przy kadej operacji zmieniajcej w jakikolwiek sposb dane w
tabeli jobs, do tabeli logs zostaa wprowadzona informacja o typie zmiany oraz
czasie kiedy ta zmiana zostaa wykonana i uytkowniku ktry tego dokona.
86. Zablokuj przy pomocy wyzwalacza moliwo zmiany istniejcych danych w tabeli
employees w taki sposb by zmniejszona zostaa warto w kolumnie salary dla
ktregokolwiek wiersza.
Dla ambitnych
87. Do tabeli logs dodaj kolumn nr z kluczem gwnym. Stwrz wyzwalacz ktry
bdzie uzupenia to pole automatycznie z sekwencji.
88. Do tabeli employees dodaj kolumn typu liczbowego o nazwie month_salary. Spraw
by przy kadym insercie do tej tabeli uwzgldniajcym informacje o wypacie
(kolumna "salary"), do nowo stworzonej kolumny bya wprowadzana 1/12 wartoci
salary. Jeli adne dane nie zostan wprowadzone do kolumny salary, przechwy
obsug bdu i wywietl na konsoli informacje o brakujcych danych.