You are on page 1of 140

O Oracle ludzkim gosem

SQL i PL/SQL podstawy


Andrzej Klusiewicz

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl

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

Zmienne rekordowe .........................................................................................................................103


Atrybut %ROWTYPE......................................................................................................................105
Instrukcje SQL w PL/SQL ...............................................................................................................107
Zapytania typu SELECT.........................................................................................................109
Kursory ............................................................................................................................................111
Wyjtki - omwienie ........................................................................................................................115
Wyjtki predefiniowane .........................................................................................................116
Obsuga wyjtkw ...........................................................................................................................117
Definiowanie wasnych wyjtkw .........................................................................................118
Propagacja wyjtkw .............................................................................................................119
Procedury i funkcje informacje rozszerzone ................................................................................121
Pakiety - podstawy ..........................................................................................................................123
Pakiety - przecianie procedur i funkcji ........................................................................................125
Pakiety zmienne pakietowe i sekcja inicjalizacyjna pakietu ..............................................126
Wyzwalacze......................................................................................................................................127
Wyzwalacze obiektowe ..........................................................................................................127
Wyzwalacze wierszowe .........................................................................................................129
Predykaty w wyzwalaczach ...................................................................................................131
Wyzwalacze typu INSTEAD-OF ...........................................................................................132
wiczenia.........................................................................................................................................134

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl

str. 3/140

Licencja na wykorzystanie materiaw


Niniejsze materiay moesz pobra bezpatnie, bez adnych zobowiza i poczucia winy.
Nie ma tutaj nic to powiedzenia aden ZAIKS, adne organizacje rzdowe ani
pozarzdowe. Nad ranem nie wpadnie Ci do mieszkania ABW, GROM ani grupa
ekologw. Moesz t publikacj rozpowszechnia w dowolnej iloci kopii, w postaci
cyfrowej lub elektronicznej, moesz te wyry j na glinianych tablicach i powiesi na
przystanku. Moesz podzieli si zarwno tymi materiaami jak i wiedz z ni pozyskan z
kim chcesz. Moe nawet pomoesz w ten sposb zda komu kolokwium albo dasz mu
szans na rozwj zawodowy. Chciabym tylko jako twrca tej publikacji by nie robi dwch
rzeczy:
nie zarabia w aden sposb na tej publikacji. To znaczy, e np. nie mona jej
wykorzysta na komercyjnych szkoleniach , ani bra za jej kopie pienidzy.
nie rozpowszechnia tej ksiki we fragmentach. Jeli chcesz j komu przesa albo
opublikowa na swojej stronie, to dopki udostpniasz j jako cao w takim formacie w
jakim j udostpniamy wszystko jest w porzdku.
Mam nadziej e t drobn prob uszanujesz.
Andrzej Klusiewicz

Niezbdne oprogramowanie
Aby mc wykorzysta i przetestowa przykady z niniejszej ksiki, naley zainstalowa
ponisze oprogramowanie:

Oracle Express Edition 10 lub 11

SQLDeveloper

Winrar lub inny archiwizator

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).

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl

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:

SQL DML (ang. Data Manipulation Language jzyk manipulacji danymi),


SQL DDL (ang. Data Definition Language jzyk definicji danych),
SQL DCL (ang. Data Control Language jzyk kontroli nad danymi).

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.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl

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.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl

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

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl

str. 7/140

Obiekty bazy danych


W bazie danych Oracle istnieje wiele rnych obiektw zarwno do przechowywania
samych danych, jak i penicych funkcje wspomagajce zarzdzaniem tymi danymi.
Wszystkie obiekty tworzone s przez uytkownikw bazy danych. Uytkownik musi mie
jednak przypisane uprawnienie tworzenia danego rodzaju obiektu. W systemie Oracle
mona zdefiniowa np. takie obiekty:
Tabele su do przechowywania danych.
Indeksy s strukturami danych zwikszajcymi prdko wykonywania operacji na
tabeli.
Tabele tymczasowe Su do przechowywania danych potrzebnych na czas jednej
transakcji lub jednej sesji oraz do wspomagania zarzdzania tymi danymi:
Widoki to logiczna struktura, wirtualna tabela wyliczana w locie, okrelona przez
zapytanie SQL, umoliwia dostp do podzbioru kolumn i wierszy tabeli lub tabel.
Sekwencje Sekwencja to obiekt bazy danych generujcy kolejne liczby. Sekwencje s
stosowane przede wszystkim do tworzenia kolejnych wartoci sztucznych kluczy
podstawowych
Wyzwalacz jest to procedura wykonywana automatycznie jako reakcja na pewne
zdarzenia w tabeli bazy danych.
Pakiety, procedury i funkcje i inne
Tabela
Tabela to nieuporzdkowany zbir rekordw, informacji tego samego typu. Pole to
pojedynczy niepodzielny element informacji, zawierajcy:
Nazw identyfikujc pole,
Typ okrelajcy zbir wartoci, ktre to pole moe przyj,
Warto bdc informacj zapisan w polu.
Rekord to uporzdkowany zbir rnych pl.
Kolumna to zbir pl tego samego rodzaju z zakresu wszystkich rekordw

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl

str. 8/140

Uytkownik HR i jego schemat


Uytkownik HR
Oracle posiada predefiniowanego uytkownika HR. Suy on do celw testowych, posiada
kilka tabel z przykadowymi danymi. Aby mc zacz z niego korzysta, musimy z
poziomu uytkownika SYS odblokowa go. W tym celu uruchamiamy konsol windowsa, i
wpisujemy sqlplus sys/haslo as sysdba . Haso podajesz takie , jakie podae podczas
instalacji Oracle.

Jeste teraz zalogowany jako administrator systemu. Naley teraz odblokowa


uytkownika HR i ustawi mu haso:
ALTER USER HR IDENTIFIED BY HR ACCOUNT UNLOCK;

Jeeli zrobisz to tak jak ja, haso do uytkownika HR bdzie brzmiao hr.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl

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.

Tworzenie i zapisywanie nowego poczenia

Aby utworzy nowe poczenie klikamy zielony krzyyk znajdujcy si w


lewym grnym rogu na zakadce Connections. W poniszym oknie
wprowadzamy:
Connection Name - wasna nazwa poczenia
Username - nazwa uytkownika z ktrego uprawnieniami chcemy poczy
si do bazy danych.
Password haso w.w. Uytkownika.
Save Password zaznaczamy jeli chcemy aby haso zostao zapamitane
w programie. Jeli tego nie zaznaczymy, przy kadym czeniu si
z baz bdzie trzeba to haso wpisa.
Hostname host na ktrym znajduje si serwer Oracle. Jeli czymy si do
bazy znajdujcej si na tym samym komputerze, wpisujemy localhost
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 11/140

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

Klikajc prawym przyciskiem na nazw poczenia, a nastpnie z menu


wybierajc Open SQL Worksheet uruchomimy kolejny edytor kodu.
Klikajc View - > DBMS Output uruchomi nam si konsola na ktrej
wywietlane bd przez nas komunikaty wywoywane w podprogramach
PL/SQL

Aby konsola wywietlaa komunikaty z aktywnego poczenia musimy klikn


zielony krzyyk w jej lewym grnym rogu a nastpnie wybra poczenie
ktre nas interesuje:

Uruchamianie podprogramw w edytorze


Po napisaniu programu w edytorze moemy go uruchomi naciskajc
przycisk run wygldajcy jak Play w magnetofonach. Jeli w edytorze
mamy kilka podprogramw, zostan wykonane wszystkie. Jeli chcemy
uruchomi tylko jeden, zaznaczamy go i klikamy run lub kombinacj
klawiszy CTRL + ENTER

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.

BLOB, CLOB, BFILE


Su do przechowywania bardzo duych plikw. Ze wzgldu na ich wysok wydajno
zaleca si korzystanie z tych typw zamiast typw LONG i LONG RAW.

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.

Najprostsza posta instrukcji SELECT


Instrukcja select w najprostszej postaci pobiera wszystkie dane z wybranej tabeli.

W wolnym tumaczeniu instrukcja


select * from departments;
oznacza pobierz wszystko z tabeli departments.
Znak * oznacza wybranie zawartoci wszystkich kolumn do wywietlenia. Po sowie
from nastpuje nazwa tabeli lub widoku z ktrej maj zosta pobrane dane.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 16/140

SELECT wybranych kolumn


Poza wywietleniem zawartoci wszystkich kolumn tabeli/widoku moemy zechcie
wywietli zawarto jedynie wybranych. Po wyraeniu select okrelamy nazwy kolumn
ktre maj zosta wybrane do wywietlenia.

W wyniku zapytania wywietla moemy rwnie sta:

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.

To samo zapytanie z uyciem funkcji NVL.

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

W powyszym przykadzie zastosowaem dwa sposoby uycia as. Z cudzysowami i bez.


Bez cudzysoww piszemy w przypadku gdy alias skada si z jednego sowa, jak np.
numer. Jeli chcemy nada alias skadajcy si z dwch lub wicej sw musimy uy
cudzysoww lub znaku _ w miejsce spacji.
Sowo kluczowe DISTINCT
Sowo kluczowe distinct suy do wywietlenia wartoci lub szeregu wartoci bez
powtrze. Stosuje si je w przypadku gdy chcemy wiedzie jakie w ogle wartoci
wystpuj w danej kolumnie a nie interesuje nas ich czstotliwo wystpowania. Poniej
wywietlenie zawartoci kolumny location_id z tabeli departments bez zastosowania
DISTINCT, z powtrzeniami.

To samo zapytanie, tym razem ju z uyciem DISTINCT

Jak wida w tym wypadku wartoci pojawiaj si tylko raz.


Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 19/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

Klauzula ta ma zastosowanie nie tylko do wartoci tekstowych, ale rwnie do kolumn


liczbowych, zawierajcych daty i wartoci logiczne. Jeli nie istnieje potrzeba stosowania
sortowania, nie powinnimy z niej korzysta poniewa powoduje dodatkowe niepotrzebne
obcienie serwera bazy danych.

Sortowa moemy po wicej ni jednej kolumnie. Wystarczy po ORDER BY wymieni


kolejne kolumny po ktrych wynik ma zosta posortowany. Zamiast nazw kolumn moemy
uy cyfry ktre okrelaj kolejno wymienienia tych 1kolumn po SELECT.
Moemy wic posortowa id i nazw departamentu najpierw wedug id a nastpnie wg
nazwy na dwa sposoby:
select location_id, department_name from departments order by location_id,
department_name;
lub
select location_id, department_name from departments order by 1,2 ;

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:

W tym przypadku sortowanie odbywa si w odwrotnym kierunku.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 23/140

NULLS FIRST I NULLS LAST


Domylnie wartoci null pojawiaj si w przypadku sortowania rosncego na kocu
sortowania rosncego (czyli domylnego) . Aby to zmieni musimy po nazwie sortowanej
kolumny doda klauzul NULLS FIRST.
Jeli sortujemy malejco, wartoci null pojawi si domylnie na pocztku. Aby to zmieni
musimy zastosowa NULLS LAST.
select job_id from jobs order by job_id nulls last;

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 przynalenoci do listy


x [NOT] IN (x1, x2, ..., xn)
Operator ten sprawdza, czy warto x znajduje [nie znajduje ] si na licie wartoci x1,
x2, ..., xn.

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

Wywietlenie tylko tych pracownikw ktrzy zarabiaj ponad 10 ty dolarw rocznie.

Wywietlenie tylko tych pracownikw ktrych miesiczne przychody przekraczaj 800


dolarw.

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.

Wywietlenie (bez powtrze) imion tych pracownikw ktrych imiona zaczynaj si na M.

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.

Funkcja substr z uyciem dwch parametrw ostatnie litery nazwiska nastpujce po


pierwszych trzech znakach.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 35/140

Substr z m ujemnym. Parametr n najbezpieczniej w takiej sytuacji jest poda wikszy ni


dugo najduszego wyrazu.

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:

Stosujc funkcj to_char moemy zamieni go na odpowiadajcy nam format:

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 37/140

Format jest napisem, ktry moe zawiera nastpujce elementy:

Element Opis

Przykad

Wynik

Cyfra (liczba dziewitek okrela szeroko pola)

999999

1234

Wywietl wiodce zera

099999

001234

Ruchomy znak dolara

$999999

$1234

Ruchomy znak lokalnej waluty

L999999

z1234

Kropka dziesitna na wskazanej pozycji

9999.99

1234.00

Przecinek na wskazanej pozycji

999,999

1,234

MI

Znak minus z prawej strony (przy wartociach


ujemnych)

9999MI

1234-

PR

Liczby ujemne w nawiasach

9999PR

<1234>

EEEE

Notacja inynierska (w formacie musz by cztery


9.9EEEE
E)

1.2E+03

Pomn przez 10 n razy (n to liczba dziewitek po


9999V99
V)

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

SIN(x), COS(x), TAN(x)


Funkcje trygonometryczne. X podawane w radianach.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 40/140

Daty i funkcje do manipulowania datami


Oracle posiada zmienn systemow SYSDATE przechowujc aktualn dat. Aby j
odczyta moemy skorzysta z tabeli DUAL. Posiada jeden wiersz i jedn kolumn i suy
m.in. do odczytywania zmiennych systemowych. Nie przechowuje danych na stae.

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.

Formaty dla funkcji to_date


Parametr

Opis

YEAR

Rok, sownie

YYYY

Czterocyfrowy rok

YYY
YY
Y

Ostatnie 3,2 lub 1 cyfra roku.

IYY
IY
I

Ostatnie 3,2 lub 1 z roku w notacji ISO np. 1995-02-04

IYYY

Czterocyfrowy rok w notacji ISO

RRRR

Przyjmuje dwucyfrowy rok, a zwraca w czterocyfrowej


notacji.
Wartoci z zakresu 0-49 zwrci jako lata 20 wieku.
Wartoci z zakresu 50-99 zwrci jako lata 19 wieku.

Kwarta roku (1, 2, 3, 4; JAN-MAR = 1).

MM

Miesic (01-12; JAN = 01).

MON

Trzyliterowa nazwa miesica (JAN)

MONTH

Nazwa miesica

RM

Rok w notacji rzymskiej (I-XII; JAN = I).

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

Dzie w tygodniu (1-7).

DAY

Nazwa dnia tygodnia.

DD

Dzie w miesicu (1-31).

DDD

Dzie w roku (1-366).

HH

Godzina w dobie (1-12).

HH12

Godzina w dobie (1-12).

HH24

Godzina w dobie (0-23).

MI

Minuta (0-59).

SS

Sekunda (0-59).

To_char (dla dat)


to_char (date [,text1]) zamienia dat na posta znakow wedug wzorca zawartego w
cigu text1.
Funkcj to_char mona wykorzysta do przetwarzania dat wg wzorca. Od omawianej
wczeniej odmiany to_char rni si rodzajem parametrw. Tutaj przyjmuje daty,
wczeniej byy to liczby.
W poniszym przykadzie wywietliem rok cyfrowo oraz rok sownie na podstawie daty
systemowej korzystajc ze wzorca.

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.

Uycie klauzuli DISTINCT w powyszych funkcjach powoduje, e wiersze, dla ktrych


agregowane wyraenie si powtarza, agregacji podlegaj tylko jeden raz. Przykadowo
jeli do przykadu pokazanego powyej dodamy distinct przed salary, otrzymamy sum
pensji bez powtrek tj. jeli pensj 2 osb bd takie same warto ich pensji
policzona zostanie tylko raz:

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

W kocowej czci wyniku widzimy czym rni si ROLLUP od CUBE: Poza


podsumowaniem wypat dla kadego departamentu i wypat ludzi konkretnego managera
w tym departamencie widzimy rwnie podsumowanie wypat dla ludzi danego managera
we wszystkich departamentach razem wzitych, oraz podsumowanie caoci.

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:

Najpierw wywietliem wszystkich ktrzy pracuj w departamencie o numerze 90,


nastpnie wszystkich zarabiajcych powyej 12000$. Przy korzystaniu z operatora union
all, osoby si powtarzaj. Kiedy w kolejnym przykadzie zastosowaem union, powtrki
zostay wyeliminowane.

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;

Jak widzimy w poniszym przykadzie ilo wierszy powstaych w wyniku zczenia


kartezjaskiego jest iloczynem iloci wierszy w tabelach departments oraz locations;

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

Czasami zachodzi potrzeba odwoania si w jednym zapytaniu dwukrotnie do tej samej


tabeli. Poniej wywietlam nazwisko pracownika, numer id jego managera oraz nazwisko
managera. Dzieje si tak poniewa tabel employees potraktowaem jako dwie rne
tabele. Manager_id odpowiada polu employee_id przeoonego, wic w tym wypadku
tabela employee zosta potraktowana tak jak dwie tabele zawierajca pracownikw
oraz zawierajca managerw.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 57/140

ZCZENIA TYPU JOIN


JOIN ON
Inn metod czenia wielu tabel jest korzystanie z klauzuli JOIN. Przypumy e chcemy
pobra dane z dwch tabel jednoczenie. Nasze zadanie to wywietli nazwy
departamentw i w ktrych si znajduj. Musimy pobra dane z tabel locations i
departments. Moemy to zrobi przy wykorzystaniu dotychczas omawianej metody tj.
zwykego czenia zewntrznego:

Ten sam wynik moemy osign stosuj join on

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

RIGHT OUTER JOIN


Right outer join jest zczeniem zewntrznym.
Konstrukcja typu:
select * from departments d, locations l where d.location_id(+)=l.location.id;
jest rwnoznaczna z konstrukcj:
select * from departments d, right outer join location l on (d.location_id=l.location_id);

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

Konstrukcja z RIGHT OUTER JOIN:

LEFT OUTER JOIN


Left outer join jest zczeniem zewntrznym.
Konstrukcja typu:
select * from departments d, locations l where d.location_id=l.location.id(+);
jest rwnoznaczna z konstrukcj:
select * from departments d left outer join location l on (d.location_id=l.location_id);
Jeli do tej pory postawilibymy ten znaczek po prawej, musimy zastosowa LEFT
OUTER JOIN, natomiast jeli (+) postawilibymy po lewej, stosujemy RIGHT OUTER
JOIN.
FULL OUTER JOIN
FULL OUTER JOIN jest poczeniem RIGHT OUTER JOIN i LEFT OUTER JOIN, lub
konstrukcji z dwoma (+) po stronach obu tabel (cho taka konstrukcja nie moe oczywicie
istnie jest to tylko analogia). Wywietla niedopasowane elementy z obu tabel.

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.

W powyszym przykadzie najpierw wywietliem jaka jest najnisza paca, a nastpnie


korzystajc z tego zapytania jako podzapytania wywietliem kto zarabia najmniej.
Przykad logiki konstrukcji takich zoonych zapyta. Chcemy wybra tylko tych
pracownikw ktrzy zarabiaj wicej ni rednia w firmie tych ktrzy zawyaj redni
pac . W tym celu najpierw musimy obliczy redni pac w firmie a nastpnie ten wynik
porwna z zarobkami kadej osoby. rednia zarobkw wynosi 6461$ co wiemy dziki
temu zapytaniu:

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 62/140

Teraz to zapytanie musimy zamontowa do naszego gwnego zapytania jako element


warunku:

W tym wypadku obliczenie redniej realizowane jest w pierwszej kolejnoci, a dopiero po


nim wykonywane jest porwnanie zarobkw kadego pracownika osobno z t redni.

Podzapytania w klauzuli FROM


Kade zapytanie dostarcza zbioru danych uszeregowanych w postaci wierszy i kolumn. a
wic w takiej postaci, w jakiej dane s przechowywane w tabelach. Mona to wykorzysta
wpisujc podzapytanie w klauzuli FROM zapytania zewntrznego.
W takim wypadku wynik zwrcony przez podzapytanie jest traktowany jak dynamicznie
utworzona tabela, ktra posiada pewien okrelony zbir kolumn i wierszy, do ktrych
mona odwoywa si w zapytaniu zewntrznym jak do kolumn i wierszy zwykej,
statycznej tabeli.

W tym zapytaniu najpierw zostanie wykonane zapytanie pobierajce dane o nazwisku i


zarobkach osb majcych managera o id 100. Z tego zapytania zostali wywietleni tylko ci
ktzy zarabiaj wicej ni 10000.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 63/140

Podzapytania w klauzuli SELECT


Podzapytania mona te umieszcza w klauzuli SELECT pod warunkiem, e s to
podzapytania zwracajce dokadnie jeden wiersz i dokadnie jedn kolumn.

Tutaj wywietliem nazwisko i pac pracownika oraz porwnaem je z maksymalnymi


zarobkami przy pomocy podzapytania w klauzuli select.

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

Exists i not exists


Tych operatorw uywamy gdy chcemy sprawdzi czy podzapytanie zwraca jakiekolwiek
wiersze.
Poniej przykad 2 zapyta. Pierwsze wywietla tych pracownikw ktrzy s managerami
ktregokolwiek z departamentw. Drugie wywietla tych pracownikw ktrzy nie s
managerami adnego departamentu.
select employee_id from employees e where exists (select manager_id from departments
d where d.manager_id=e.employee_id);

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

Transakcja jest zatwierdzana i koczy si w chwili wykonania instrukcji COMMIT.


Wszystkie modyfikacje danych zostaj zapisane w bazie. W przypadku wykonania
ktrejkolwiek z instrukcji nalecej do grupy DML wykonywany jest niejawny COMMIT.
Naley rwnie zwrci uwag na ustawienia naszych edytorw SQL. Czsto jest w nich
ustawiony domylnie autocommit (jak na rysunku poniej). Transakcje w takim wypadku
zatwiedzane s bez wykonania przez nas instrukcji 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

Instrucja SAVEPOINT pozwala zachowywa punkty przywracania dziaa to tak jak


zapisywanie stanu w czasie gry :) W przypadku pomyki moemy wrci do miejsca
zapisania SAVEPOINT bez straty tych instrukcji ktre zostay wykonane przed nim i
koniecznoci rozpoczynania gry od pocztku.
Aby zaoy nowy savepoint stosujemy:
SAVEPOINT NAZWA_SAVEPOINTA;
Aby przywrci stan do okrelonego savepointa stosujemy:
ROLLBACK TO NAZWA_SAVEPOINTA;

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 68/140

Dodawanie danych [INSERT]


Podstawowy insert
Najprostsza forma polecenia insert ma konstrukcj:
INSERT INTO NAZWA_TABELI VALUES (WARTO1, WARTO2);
Sowo INTO jest opcjonalne i nie musimy go pisa. Przy powyszym musimy poda
wartoci dla wszystkich kolumn uzupenianej tabeli.
Jeli chcemy doda warto tylko do niektrych kolumn musimy zastosowa ponisz
konstrukcj:
INSERT INTO NAZWA_TABELI (NAZWA_KOLUMNY1, NAZWA_KOLUMNY2) VALUES
(WARTO1, WARTO2);
Musimy jednak pamita, e jeli w tabeli istnieje klucz gwny lub ograniczenie NOT
NULL, musimy uzupeni kolumn ktrej ten klucz lub ograniczenie dotyczy.
Insert danych pochodzcych z zapytania
Do tabeli moemy doda rwnie wiele wierszy jednoczenie, pochodzcych z innego
zapytania.
Warunkiem powodzenia jest zgodno iloci oraz typw kolumn w tabeli rdowej i
docelowej.
INSERT INTO JOBS SELECT TEST.NEXTVAL, JOB_TITLE, MIN_SALARY,
MAX_SALARY FROM JOBS;

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 69/140

Kasowanie danych [DELETE]


Aby skasowa wszystkie dane z tabeli stosujemy konstrukcj :
DELETE FROM NAZWA_TABELI;
Moemy te skasowa tylko cz danych z tabeli stosujc WHERE tak jak przy
zapytaniach SELECT
DELETE FROM NAZWA_TABELI WHERE ID=1000;
Nie uycie WHERE skutkuje usuniciem wszystkich rekordw w tabeli.
Kasowanie danych TRUNCATE
Tabel mona rwnie wyczyci cakowicie przy pomocy polecenia TRUNCATE:
TRUNCATE TABLE JOBS;
Nie moemy tutaj w przeciwiestwie do DELETE zastosowa WHERE. Moemy wyczyci
tylko cao tabeli. Tej operacji nie da si odwrci w prosty sposb!

Modyfikowanie danych [UPDATE]


Podstawowa forma modyfikacji danych:
UPDATE NAZWA_TABELI SET KOLUMNA=WARTO;
Moemy zmienia wiele kolumn naraz dodajc je po przecinku:
UPDATE NAZWA_TABELI SET KOLUMNA=WARTO, SET KOLUMNA2=WARTO2;
Rwnie tutaj moemy zastosowa WHERE:
UPDATE NAZWA_TABELI SET KOLUMNA=WARTO, SET KOLUMNA2=WARTO2
WHERE KOLUMNA=WARTO;
Nie uycie WHERE skutkuje zmian wszystkich rekordw w tabeli.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 70/140

Tabele
Tworzenie tabeli
Tworzc tabel podajemy pola jakie ta tabela ma posiada, rodzaj danych
przechowywanych przez te pola oraz wasnoci tabeli

Podczas tworzenia moemy nakada wszystkie ograniczenia z kolejnego rozdziau.


Moemy rwnie ustawi dodawanie wartoci domylnej w przypadku nie wprowadzenia
wartoci adnej dla danego pola podczas uzupeniania tabeli. Odbywa si to przy pomocy
klauzuli DEFAULT.
Tworzenie tabeli na podstawie zapytania
Tabel moemy stworzy rwnie na podstawie zapytania. Stworzona w ten sposb tabela
bdzie zawieraa wszystkie dane ktre zostan nam zwrcone jako wynik zapytania. Jeli
chcemy aby zostaa stworzona tylko struktura, moemy po klauzuli WHERE doda jaki
warunek ktry nigdy nie moe zaj. Pamita naley ze w nowo stworzonej tabeli nie
bd wystpoway indeksy a w zwizku z tym nie bdzie rwnie klucza gwnego.

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:

Zmiana nazwy tabeli


Aby zmieni nazw tabeli stosujemy polecenie RENAME:

Dodawanie kolumn do tabeli

Do dodawania kolumn do tabeli wykorzystujemy ALTER TABLE. Moemy wykorzystywa


wszystkie parametry jakie stosujemy podczas tworzenia tabeli (parametry dla kolumny).

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:

Zmiana wasnoci kolumn

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:

Przykad zakadania konstraintw na istniejcej 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

Wczanie i wyczanie konstraintw


Konstrainty moemy wczy lub wyczy. Moliwo ta staje si przydatna gdy chcemy
wykona czynno ktr uniemoliwiby nam zaoony constraint. Przykadowo
zdejmujemy klucz obcy (FOREIGN KEY) z tabeli jeli uzupeniamy j danymi ktre nie
maj swoich odpowiednikw w tabeli nadrzdnej.

Moemy po wykonaniu zaplanowanych czynnoci wczy konstraint, pod warunkiem e


jego warunek zostanie speniony (np. uzupenimy wpisy w tabeli nadrzdnej w przypadku
FOREIGN KEY). Moemy rwnie wczy konstraint bez walidacji istniejcych danych.
Konstraint bdzie w takim wypadku obowizywa tylko dla danych wprowadzonych
pniej:

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

Wykonywanie operacji DML na widokach


W przypadku zapyta, widoki funkcjonuj tak jak tabele. W zalenoci od operacji DML
widoki dotycz rne waciwoci. W adnym z poniszych wypadkw nie moemy
wykona operacji jeli widok zosta stworzony z kauzul WITH READ ONLY.

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!

Na podstawie wyej przytoczonego przykadu:


create sequence
Po tym nastpuje podanie nazwy sekwencji. W nazwie sekwencji nie moe by spacji.
Minvalue
Warto minimalna jak moe przybra sekwencja.
Maxvalue
Warto maksymalna jak moe przybra sekwencja.
Start with
Okrela warto od jakiej ma si rozpoczyna sekwencja.

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.

Pobieranie wartoci z sekwencji


Do pobierania danych z sekwencji, wykorzystywane s dwie pseudokolumny currval i
nextval.
Nextval
Suy do pobierania nastpnej wartoci z sekwencji.
Currval
Suy do pobierania aktualnej wartoci sekwencji. Przed wykorzystaniem currval naley
wykona przynajmniej raz nextval na danej sekwencji. W przypadku braku takiej inicjacji,
zarwno currval jak i nextval bd miay t sam warto odpowiadajc parametrowi
start with dla danej sekwencji.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 80/140

Pobiera wartoci z sekwencji moemy na dwa sposoby. Wykorzystywa do tego select na


tabeli (np. dual) lub w instrukcjach DML. Drugi to pobieranie wartoci przy wstawianiu
wierszy do tabeli ( o tym par wierszy niej). Poniej przytaczam przykady pobrania
wartoci currval i nextval oraz rnice pomidzy nimi.

wykorzystanie sekwencji w instrukcjach DML


Dodajc dane do tabeli czsto zachodzi konieczno wygenerowania dla kadego wpisu
unikalnego id dla kadego wiersza. Zdarza si e jest to wymagane z powodu zaoenia
na danej tabeli klucza gwnego. W takiej sytuacji najwygodniej jest skorzysta z
sekwencji. Sekwencje mog produkowa tylko wartoci liczbowe.

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

Informacje podstawowe o PL SQL


PL/SQL to proceduralny jzyk programowania cile zwizany z bazami danych Oracle.
Korzystanie z niego daje nam wiele nowych moliwoci:
- moemy korzysta z ptli i bardzo rozbudowanych instrukcji warunkowych
- moemy np. siga do plikw na dysku, pobiera dane ze stron internetowych
- moemy poprawi wydajno naszych dziaa na bazie danych
- moemy realizowa zadania ktre ze znajomoci samego SQL nie byyby moliwe - np.
stworzy rozbudowany program ktry wykona wiele nastpujcych po sobie czynnoci.
- moemy przechwytywa i obsugiwa wyjtki

Rodzaje blokw PL/SQL


W PL/SQL moemy tworzyc bloki jako :
bloki anonimowe
procedury
funkcje
wyzwalacze
W tym rozdziale sposb ich tworzenia oraz uycia jest przedstawiony bardzo zdawkowo.
Napisaem taki opis tylko w celach pogldowych. Sporo wicej o tym bdzie w nastpnych
rozdziaach, na razie drogi czytelniku musisz si dowiedzie o co w ogle chodzi w tym
caym PL/SQL :)

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

Kasowanie procedur odbywa si poprzez zastosowanie poniszej konstrukcji:


DROP PROCEDURE NAZWA_PROCEDURY;
z poziomu SQL. Z poziomu programw PL/SQL (bez uycia dynamicznego SQL )nie
moemy kasowa innych programw.

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

Wykonaem zapytanie SQL odwoujce si do nowo stworzonej funkcji. Aby to wykona


musiaem skorzysta z pseudo tabeli DUAL zawierajcej jeden wiersz i jedn kolumn.
Tabela ta suy m.in. do tego typu dziaa i nie zawiera adnych danych. Jak wida
powyej, w wyniku dziaania zapytania zostaa mi zwrcona zadeklarowana w funkcji
warto.
Kasowanie funkcji odbywa si poprzez zastosowanie poniszej konstrukcji:
DROP FUNCTION NAZWA_FUNKCJI;
z poziomu SQL. Z poziomu programw PL/SQL nie moemy kasowa innych programw.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 88/140

Wyzwalacze

Wyzwalacze s blokami PL/SQL wykonywanymi w reakcji na okrelone zdarzenie w bazie


danych.

Powyszy trigger (wyzwalacz) zadziaa przed wrzuceniem danych do tabeli departments.


Ten wyzwalacz nie wykona adnych czynnoci, zostanie jedynie wywoany. Kasowanie
wyzwalaczy odbywa si poprzez zastosowanie poniszej konstrukcji:
DROP TRIGGER NAZWA_FUNKCJI;
z poziomu SQL. Z poziomu programw PL/SQL nie moemy kasowa innych programw.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 89/140

Wywoywanie procedur i funkcji


Procedury i funkcje wywoujemy w rny sposb. O ile procedur wywoujemy w kodzie
innej procedury pl/sql (lub bloku anonimowego) :

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:

Nie moemy wywoywa funkcji w taki sposb jak procedur. Otrzymamy bd :

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 91/140

Typy danych w PL/SQL


W PL/SQL moemy przechowywa dane w takich typach jak w SQL, jednak kilka typw
danych nieznacznie si rni.
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.
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. W
PL/SQL maksymalna dugo wynosi 32768 znakw zamiast 255 w SQL
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. W PL/SQL
maksymalna dugo wynosi 32768 znakw zamiast 4000 w SQL.
Long
Posiada wasnoci takie jak VARCHAR2, jednak moe przechowywa do 2 GB tekstu.
Raw(L)
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 92/140

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.
BLOB, CLOB, BFILE
Su do przechowywania bardzo duych plikw. Ze wzgldu na ich wysok wydajno
zaleca si korzystanie z tych typw zamiast typw LONG i LONG RAW.
Boolean
typ, ktry moe przyjmowa tylko trzy wartoci: TRUE, FALSE, NULL. Nie mia swojego
odpowiednika w SQL

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

Zmienna_liczbowa zmienna typu liczbowego number o zadeklarowanej dugoci 5


znakw. Deklarowanie dugoci zmiennej nie jest obligatoryjne.
Zmienna_tekstowa zmienna typu tekstowego varchar2 o dugoci 100 znakw.
zmienna_nie_pusta zmienn moemy okreli jako nie pust tzn. musi zosta do niej
przypisana jaka warto tak jak w powyszym przypadku, jednak musimy okreli od
razu jaka ta warto ma by.
zmienna_typu_kolumny moemy stworzy zmienn ktrej typ zostanie nadany na
podstawie typu kolumny w okrelonej tabeli. Kolumn okrelamy podajc jej nazw po
nazwie tabeli zawierajcej t kolumn oraz kropce. Dodatkowo musimy umieci znacznik
%TYPE.
stala_liczbowa statyczna warto ktra nie moe by zmieniana. Po nazwie zmiennej a
przed deklaracj typu umieszczamy znacznik CONSTANT. Obligatoryjne jest te
zdefiniowanie wartoci.
wartosc_domyslna zmienna typu numerycznego z zadeklarowan wartoci ktra
zostanie do niej przypisana przypisana jeli uytkownik nie zdeklaruje innej wartoci.

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:

Komunikat zmienna ma warto 50 wywietlony zostanie tylko jeli speniony zostanie


warunek po IF. Jeli warunek nie zostanie speniony, wykonane zostan dalsze polecenia,
nastpujce po end if. Warunkw moemy oczywicie stosowa znacznie wicej:

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

Powyszy przykad mona oczywicie rozwiza prostym dzieleniem, zaleao mi jedynie


na jak najbardziej zrozumiaym przykadzie.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.pl str. 96/140

Druga forma instrukcji CASE umoliwia przypisanie do zmiennej rnych wartoci w


zalenoci od warunkw. Zmienna polowa_zmiennej przybierze warto 5,10,15 lub w 0
w zalenoci od wartoci zmiennej zmienna. Taka konstrukcja ma jednak pewne
ograniczenie. Prosz zauway e jedynym warunkiem logicznym jest rwno. W tym
wypadku nie moemy zastosowa znakw > lub <.

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:

lub stosujc warunek IF THEN z klauzul EXIT:

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.

Domylnie przy deklaracji zakresu najpierw podaje si warto mniejsz a nastpnie


wiksz a warto iteratora maleje z kadym cyklem. Moemy to odwrci stosujc
klauzul REVERSE. W takim wypadku warto iteratora bdzie si zmniejsza.

(!) 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

tym pisz i dlatego trzeba na to uwaa.

Tak jak i we wczeniej prezentowanych ptlach, take i tutaj moemy skorzysta z


polecenia EXIT lub EXIT WHEN.

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.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


103/140

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.

Na powyszej ilustracji widoczny jest przykad deklarowania zmiennej w oparciu o


struktur tabeli JOBS (w schemacie HR) . Zmienna1 posiada wic te same pola jakie
wystpuj w tabeli jobs. Do poszczeglnych pl odwoujemy si w ten sam sposb jak w
przypadku zwykej zmiennej rekordowej.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


104/140

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.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


105/140

Instrukcje SQL w PL/SQL


Stosowanie zapyta z grupy DML w programach PL/SQL niewiele rni si od
standardowych zapyta SQL. Obowizuje tutaj jednak szereg zasad, wykonanie
niektrych czynnoci dostpnych w SQL jest tutaj niemoliwe. O wszystkich
ograniczeniach oraz korzyciach wynikajcych z zasad przyjtych dla jzyka PL/SQL bd
pisa stopniowo przy okazji omawiania kolejnych rodzajw zapyta.
Polecenie INSERT w PL/SQL nie rni si od jego standardowej formy,jednak mamy tutaj
moliwo podstawiania zmiennych wartoci do zapytania. Na poniszej ilustracji
prezentuj instrukcj INSERT z wykorzystaniem zmiennych. Musimy pamita, by
podstawiane zmienne byy takiego typu jak kolumna do ktrej wstawiamy dane, lub
przynajmniej typu konwertowalnego na typ kolumny.

W PL/SQL istnieje opcjonalna klauzula RETURNING INTO pozwalajca na zapisanie do


zmiennej wartoci pochodzcych z rekordu wstawianego przez polecenie INSERT. Taka
moliwo staje si bardzo uyteczna, gdy zechcemy uzyska ID wanie wstawionego
rekordu.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


106/140

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.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


107/140

Zapytania typu SELECT


(!) Przed przejciem do dalszego opisu warto zapamita bardzo istotne zasady dotyczce
stosowania zapytania SELECT w PL/SQL.
Zapytanie musi zwraca zawsze dokadnie jeden wiersz z bazy.
W zapytaniu stosujemy dodatkow klauzul INTO z list zmiennych do ktrych
przypisujemy wartoci z pl wynikw
Lista zmiennych w klauzuli INTO musi by rwna liczbie kolumn zwracanych w
wyniku zapytania. Takie same musz by rwnie typy kolumn i zmiennych wedug
kolejnoci.

Do tej pory korzystajc z SQL otrzymywalimy informacje w postaci wyniku na konsoli. W


PL/SQL tego typu konsoli nie ma. Jest konsola na ktr moemy wypisa informacje, ale
musimy w tym celu skorzysta z pakietu dbms_output. Wynik moemy natomiast
przypisa do zmiennych, przetworzy i wykona inne czynnoci czego nie moglimy zrobi
z zwykym SQL. Aby dane zwrcone w wyniku zapytania przypisa do zmiennych, musimy
wykorzysta klauzul INTO. Pamitajc o zasadach wypisanych powyej tego akapitu , po
wymienieniu kolumn z tabeli wymieniamy zmienne do ktrych wynik ma zosta zapisany.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


108/140

W podobny sposb moemy przypisa wynik do zmiennej utworzonej przy pomocy


omawianego wczeniej atrybutu %ROWTYPE.

Moemy rwnie pobra warto wiersza, przetworzy j a nastpnie wrzuci z powrotem


do tabeli w jednym bloku PL/SQL. Wida to na poniszym przykadzie. Musiaem zmieni
employee_ID- poniewa to pole jest kluczem gwnym dla tabeli employees, oraz pole
email, poniewa na kolumn email w tabeli employees naoony jest constraint UNIQUE.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


109/140

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

Kursor otwieramy w sekcji wykonawczej bloku PL/SQL. W tym momencie do kursora


pobierane s dane. W jednym bloku kursor moemy otworzy tylko raz.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr. 110/140

Pobranie wierszy z kursora


Majc dane zaadowane do kursora (kursor otwarty), moemy pobra je do zmiennych. Na
poniszej ilustracji wida, e zdeklarowaem zmienne do ktrych nastpnie pobieram dane
z kursora. Istotne jest by pamita e dane zostan zaadowane do zmiennych w takiej
kolejnoci w jakiej wypadaj kolumny kursora. W tym wypadku zapytanie na podstawie
ktrego stworzony zosta kursor zwraca dokadnie jeden wiersz. Gdybym z tego zapytania
usun warunek where job_id=160 w kursorze znalazoby si tyle wierszy ile znajduje si
w tabeli jobs. W takiej sytuacji zastosowanie klauzuli FETCH zwrcioby mi pierwszy
wiersz ze zbioru danych w kursorze. Gdybym zechcia przetworzy wicej ni jeden wiersz
w wielowierszowym kursorze, musiabym zastosowa ptl kursorow o ktrej bdzie
mowa w nastpnych rozdziaach.

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

Su do okrelania wasnoci kursora.


ISOPEN Zwraca true jeli kursor jest otwarty i false jeli kursor jest zamknity.
ROWCOUNT Zwraca ilo wierszy ktre ju zostay cignite z kursora
NOTFOUND Suy najczciej do sprawdzania czy w kursorze s jeszcze jakie dane.
Zwraca true jeli komenda FETCH nie moe pobra kolejnego wiersza. Jeli FETCH
moe pobiera dane dalej, zwraca false
FOUND - Suy najczciej do sprawdzania czy w kursorze s jeszcze jakie dane. W
przeciwiestwie do NOTFOUND zwraca false jeli komenda FETCH nie moe pobra
kolejnego wiersza. Jeli FETCH moe pobiera dane dalej, zwraca true
Poniej prezentacja zastosowania atrybutw kursora. Kursor zosta zadeklarowany i
otwarty, a nastpnie przetwarzany jest w ptli do momentu kiedy atrybut NOTFOUND
zwrci warto true.
Odbywa si to dziki klauzuli EXIT WHEN. Zwr uwag e nie zastosowaem tutaj
adnego warunku typu notfound=true. Jeli nie zdeklaruj takiego porwnania,
domylnie dostawiane jest =true (my tego oczywicie nie widzimy dzieje si to
wewntrzsystemowo). Na koniec korzystam z atrybutu ROWCOUNT aby okreli ile
ostatecznie wierszy zostao pobrane z kursora.
Sprawdzanie iloci wierszy wykonuj jeszcze na otwartym kursorze, przed jego
zamkniciem, poniewa w innym wypadku otrzymabym komunikat o bdzie invalid
cursor i program zostaby przerwany.

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

Lista najczciej pojawiajcych si predefiniowanych wyjtkw w PL/SQL


INVALID_NUMBER powstaje podczas prby wykorzystania wartoci tekstowej jako
wartoci numerycznej w SQL. W PL/SQL zamiast niego wywoywany jest wyjtek
VALUE_ERROR
TOO_MANY_ROWS pojawia si, gdy polecenie SELECT INTO wybrao wicej ni jeden
rekord a jak ju wiemy z poprzednich rozdziaw select w PL/SQL przypisujcy wartoci do
zmiennej musi zawsze zwrci jeden wiersz.
NO_DATA_FOUND powstaje, gdy polecenie SELECT INTO nie zwraca adnego wiersza.
LOGIN_DENIED nieudana prba zalogowania do bazy Oracle przy uyciu nieprawidowej
nazwy uytkownika lub hasa, oraz w przypadkach gdy uytkownik nie posiada uprawnie
do czenia si z baz danych.
DUP_VAL_ON_INDEX powstaje w czasie prby dodania wiersza do tabeli z naruszeniem
klucza gwnego lub indeksu UNIQUE kiedy podajemy warto ju istniejc w kolumnie.
CURSOR_ALREADY_OPEN powstaje w czasie prby otwarcia kursora ju otwartego.
INVALID CURSOR powstaje w czasie prby wykonania nielegalnej operacji na kursorze,
na przykad, zamknicia kursora nie otwartego.
NO_LOGGED_ON powstaje podczas prby wykonania dziaa na bazie danych bez
uprzedniego zalogowania si.
STORAGE_ERROR powstaje, gdy zabraknie pamici operacyjnej dla programu, lub gdy
nastpia awaria pamici.
VALUE_ERROR powstaje z powodu bdw arytmetycznych i konwercyjnych w
sytuacjach, ktrych nie obejmuje wyjtek INVALID_NUMBER.
ZERO_DIVIDE powstaje przy prbie dzielenia liczby przez zero.

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

Definiowanie wasnych wyjtkw


Niekiedy zachodzi potrzeba obsuenia sytuacji wyjtkowych nie ujtych w zbiorze
wyjtkw predefiniowanych. Przykadowo uytkownik wprowadza w formularzu wzrost nie
mieszczcy si w naturalnych granicach np. 4 metry. Moemy tak sytuacj obsuy
definiujc wasny wyjtek.
W sekcji DECLARE musimy zdefiniowa wyjtek - w tym przypadku moj_wyjatek. W
sekcji EXCEPTION zadeklarowaem dziaania ktre maj zosta wykonane w przypadku
pojawienia si mojego wyjtku. Dodaem warunek, e jeli podany wzrost wyniesie wicej
ni 240cm ma zosta wywoany mj nowo stworzony wyjtek. Uzyskuj to poprzez
zastosowanie klauzuli RAISE NAZWA_WYJATKU. W ten sposb mog wywoywa
rwnie wyjtki predefiniowane.
Niekiedy w sytuacjach podbramkowych definiowanie wasnych wyjtkw jest stosowane w
taki sposb jak instrukcja GOTO w starszych jzykach programowania jak Pascal lub
Basic. Nie warto jednak dziaa w ten sposb, poniewa kod staje si w takim wypadku
bardzo nieczytelny.

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

Procedury i funkcje informacje rozszerzone


Dla procedur oraz funkcji istniej opcjonalne parametry. Mog wystpowa w trzech
typach
IN parametr tylko do odczytu, poprzez ktry dane zostaj przekazane do podprogramu.
OUT Suy do zwracania wartoci z podprogramu. Ma warto NULL do momentu kiedy
zostanie zainicjalizowana.
IN OUT Poczenie dwch powyszych typw. Podczas wywoywania programu tym
parametrem przekazywane s do niego wartoci, a po zakoczeniu wykonywania
zwracane. Stosuje si go gdy dane wejciowe maj zosta zmienione podczas dziaania
programu.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


120/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

varchar2(243) musz zastosowa samo varchar2.

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.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


122/140

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.

Majc ju dziaajcy skompilowany pakiet mog si odwoa do funkcji i procedur w nim


zawartych:

Jeli odwouj si do funkcji/procedury zawartej w pakiecie z konsoli, podprogramu nie


ujtego w pakiecie lub zawierajcego si w innym pakiecie ni podprogram do ktrego si
odwouje, musz poda nazw pakietu przed nazw wywoywanej funkcji. Jeli odnosz
si do tego podprogramu z innego podprogramu zawartego w tym samym pakiecie, nazwy
wywoywanej funkcji/procedury nie musz poprzedza nazw pakietu.
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.
123/140

Pakiety - przecianie procedur i funkcji

W jednym pakiecie moemy zdefiniowa kilka procedur lub funkcji o identycznych


nazwach, jednak musz one rni si iloci lub typem parametrw przyjmowanych. Nie
mona zdefiniowa identycznych podprogramw jeli rni si jedynie zwracanym typem
lub typami parametrw IN, IN OUT i OUT.
W poniszym przykadzie dodaem drug funkcj srednia_zarobkow_dzialu rnic si
tylko jednym parametrem. Dodaem parametr id_managera aby wywietla rednie
zarobkw w danym dziale, obliczane na podstawie zarobkw pracownikw podlegych
konkretnemu managerowi w tym dziale.

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:

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


124/140

Pakiety zmienne pakietowe i sekcja inicjalizacyjna pakietu


W niektrych sytuacjach zmienne w pakiecie musz zosta zainicjalizowane dynamicznie
np. wartoci pochodzc z zapytania. Do naszego wiczebnego pakietu dodaj zmienn
dostpn dla wszystkich podprogramw w tym pakiecie:

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.:

Do zmiennej zmienna zostanie przypisana warto bdca wynikiem dziaania funkcji


srednia_zarobkow_dzialu. Zwr uwag e jeli zmieni si warto jaka wynikaaby z tej
funkcji w trakcie korzystania z pakietu, ale ju po inicjalizacji zawarto zmiennej
zainicjalizowanej w ten sposb nie zmieni si.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


125/140

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!!

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


126/140

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.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


127/140

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.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


128/140

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:

Mam te moliwo zdefiniowania wyzwalacza ktry bdzie si wykonywa tylko jeli


speniony zostanie warunek dotyczcy wprowadzanych danych.
Uwaga: W ciele wyzwalaczy nie moe by instrukcji ktre modyfikuj struktur lub
zawarto tabeli na ktr naoony jest wyzwalacz. Nie mog te zawiera instrukcji
wpywajcych na transakcj ani odwoywa si do podprogramw zawierajcych takie
instrukcje.
W wyzwalaczu CUSTOM3 wywietlona zostanie informacja tylko jeli warto
MAX_SALARY wstawianego wiersza bdzie wysza ni 10000. Zwr uwag, e
wykonywane s rwnie inne wyzwalacze ktre wczeniej naoyem na dziaania na tej
tabeli.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


129/140

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.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


130/140

Wyzwalacze typu INSTEAD-OF

Na niektrych widokach nie mona wykonywa operacji DML (kasowania, zmiany,


dodawania wierszy) . Przykadem moe by widok oparty o poczone tabele:

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:

Widzimy e w jednej lokalizacji moe znajdowa si wicej ni jeden departament. Teraz


chciabym, aby przy usuwaniu danego departamentu :
jeli wybrany departament jest jedynym w lokalizacji, automatycznie powinna zosta
skasowana rwnie lokalizacja

jeli w lokalizacji w ktrej znajduje si wybrany departament znajduj si inne


departamenty, to lokalizacja powinna zosta nienaruszona, natomiast powinien
zosta usunity departament.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


131/140

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.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


132/140

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.

Operatory, filtrowanie wierszy


12. Wywietl wszystkich pracownikw ktrych przeoonym jest manager o id 123 (z tabeli
employees)
13. Wywietl wszystkich pracownikw zarabiajcych wicej ni 8000 rocznie.
14. Wywietl wszystkich pracownikw ktrych miesiczne przychody s wiksze ni 1100
dolarw
15. Wywietl wszystkich ktrzy zarabiaj wicej ni 9 ty ale mniej ni 13 ty rocznie.
16. Wywietl wszystkich ktrzy zarabiaj miesicznie wicej ni 800$ ale mniej ni 1200$.
17. Wywietl wszystkich pracownikw ktrych imi koczy si na a.
18. Wywietl wszystkich ktrych nazwiska maj w rodku liter a i jednoczenie zarabiaj
wicej ni 8000 dolarw rocznie.
19. Wywietl tych ktrych przeoonymi s managerowie o id 100 i 123.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


133/140

Funkcje znakowe, numeryczne i do manipulowania datami


20. Wywietl imiona i nazwiska pracownikw w taki sposb by wszystkie litery w imionach
byy mae a w nazwiskach due.
21. Wywietl nazwiska pracownikw w taki sposb by najpierw wszystkie je zmniejszy a
nastpnie zwikszy pierwsz liter.
22. Zamie wszystkie wystpienia cigu "Ma" w nazwiskach pracownikw na "AM" przy
pomocy replace
23. Wywietl litery od 3 do 6 z nazwisk pracownikw
24. Wywietl miesiczne zarobki pracownikw z dokadnoci do 2 cyfry po przecinku przy
pomocy to_char
25. Wywietl nazwiska pracownikw oraz ich dugo
26. Wywietl wynagrodzenie pracownikw zaokrglone oraz ucite do tysicy.
27. Ile dni ma luty w 2098 roku?
28. Zaokrglij dat ktra przypada za 148 miesicy do jednego roku
29. Wywietl aktualny czas z dokadnoci do sekundy.
Dla ambitnych
29. Jaka dokadna data przypada w poowie okresu od teraz do sylwestra roku 2100?
30. Jakim zapytaniem sprawdzisz czy liczba jest podzielna przez 2?

Funkcje agregujce, grupowanie


31. Wywietl najwysz pensj dla kadego dziau i posortuj rosnco
32. Wywietl najwysz pensj dla kadego dziau ale tylko w dziaach o numerach 50,80 i
60
33. Wywietl najnisz pensj dla kadego dziau ale uwzgldniajc w obliczeniach tylko
osoby ktre nie maj litery e w nazwisku.
34. Wywietl rednie zarobki podsumowujc je wg. managerw dla kadego dziau
oddzielnie.
35. Wywietl rednie zarobki podsumowujc je wg. managerw dla kadego dziau
oddzielnie ale uwzgldniajc tylko dziay o numerach w ktrych pracuje wicej ni 1
osoba.
Dla ambitnych
36. Wywietl rednie zarobki podsumowujc je wg. managerw dla kadego dziau
oddzielnie z jednoczesnym podsumowaniem rednich zarobkw osb podlegych pod
jednego managera.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


134/140

Operatory zbiorowe, zczenia, podzapytania


37. Wywietl wszystkie nazwy regionw przyporzdkowujc je do nazw krajw. Wynik
posortuj wg. Regionw rosnco.
38. Wywietl lokalizacje oraz departamenty do nich przypisane w taki sposb aby
wywietlone zostay rwnie te lokalizacje do ktrych nie zostay przypisane adne
departamenty. Puste lokalizacje powinny zosta wywietlone na kocu.
39. Wywietl tych pracownikw ktrzy zarabiaj powyej redniej w firmie.
40. Wywietl rnic pomidzy najwyszymi a najniszymi zarobkami w departamencie
Finance
41. Wywietl tych pracownikw ktrzy zarabiaj wicej od kogokolwiek kto pracuje w
departamencie Finance
42. Wywietl wszystkich managerw
43. Wywietl nazwiska pracownikw oraz nazwiska ich przeoonych
44. Wywietl nazwiska pracownikw oraz nazwy departamentw w ktrych pracuj.
Dla ambitnych
45. Wywietl nazwiska oraz pac tych pracownikw ktrzy s przeoonymi
kogokolwiek
46. Wywietl nazwiska pracownikw a obok nich liczebno pracownikw oraz redni
zarobkw w departamencie w ktrym pracuj.
47. Wywietl tych pracownikw ktrzy pracuj w departamencie Finance a
jednoczenie zarabiaj wicej ni rednia w caej firmie.
48. Wywietl nazwiska pracownikw oraz nazwy regionw w ktrych znajduj si
departamenty w ktrych pracuj

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


135/140

Widoki, sekwencje, modyfikowanie danych


49. Stwrz widok ktry umoliwi wywietlanie pracownikw z departamentu o podanej
nazwie
50. Stwrz widok ktry umoliwi dodawanie nowego wiersza do tabeli regions.
51. Stwrz sekwencj ktra rozpoczyna si od 1, o wartoci maksymalnej 9999
postpujc o 1.
52. Sprawd warto sekwencji nie zmieniajc jej wartoci.
53. Wprowad dane korzystajc z widoku stworzonego w wiczeniu 50.
Dla ambitnych
54. Korzystajc z widoku stworzonego w czasie wicze w dziale Widoki zdubluj
dane w tabeli regions uzupeniajc pole region_id wartoci pobran z sekwencji.

PL SQL zmienne, stae


55. Stwrz procedur posiadajc jedn sta typu tekstowego, jedn zmienn typu
liczbowego o wartoci domylnej 0, oraz jedn niezainicjowan zmienn tekstow;

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


136/140

PL SQL instrukcje sterujce, ptle, zmienne rekordowe, atrybut


%ROWTYPE
56. Stwrz blok anonimowy ktry posiada bdzie jedn zmienn typu rekordowego
przedstawiajcego osob. Typ rekordowy ma posiada pola: imi, nazwisko numer
telefonu. Zadeklaruj dwie zmienne tego typu, zainicjuj je a nastpnie wypisz na
konsoli ich zawarto
57. Stwrz blok anonimowy posiadajcy zdeklarowan zmienn rekordow
odpowiadajc konstrukcji tabeli employees;
58. Wywietl w ptli wartoci od 1 do 100.
59. Zadeklaruj dwie zmienne liczbowe i zainicjuj je. Stwrz blok warunkowy ktry
sprawdzi czy pierwsza zmienna jest wiksza od 10. Jeli tak to niech j wypisze na
konsol, jeli nie to niech wypisze na konsol e jest mniejsza oraz warto drugiej
zmiennej.
Dla ambitnych
60. Przypisz ca zawarto jednej zmiennej rekordowej z w. 56 do drugiej.
61. Stwrz typ rekordowy o strukturze analogicznej jak tabela regions i zmienn tego
typu. Stwrz tez zmienn typu rekordowego opart o struktur tabeli regions.
Zainicjuj obie. Do pierwszej zmiennej przypisz zawarto drugiej.
62. Wywietl w ptli liczby parzyste od 1 do 500.

PL SQL tablice, SQL w PL SQL


63. Stwrz procedur ktra wywietli na ekranie imi, nazwisko oraz numer telefonu
pracownika o id 104
64. Stwrz blok anonimowy. Zdefiniuj w nim tablic typu varchar2 o dugoci tysica
pozycji. Zainicjuj wszystkie pozycje treci "pusto". D odaj podsumowanie
sprawdzajce i wypisujce na ekranie ile pl w tablicy zostao wypenionych.
65. Wywietl na ekranie tyle razy liter X ile jest wierszy w tabeli jobs . Przy kadym
wypisywanym X napisz ktry raz wykonywane s instrukcje w ptli. Wykonaj to
wiczenie z wykorzystaniem kadej znanej Ci ptli wystpujcej w PL/SQL.
Dla ambitnych
66. Stwrz blok anonimowy ktry sprawdzi czy wybrany pracownik ( wybierz
dowolnego) jest czyimkolwiek managerem. Jakie zapytanie SQL jest do tego
potrzebne moesz zapyta instruktora, lub wymyli je sam - podpowied: w tabeli
employees istnieje pole manager_id, okrela ono pracownika o takim employee_id
jak manager_id innej osoby. Ten pracownik jest jego managerem. Ilo
pracownikw ktre podlegaj pod t osob mona okreli funkcj count(). Jeli
ilo osb podlegych wynosi 0 - to znaczy e nie jest niczyim managerem. Jeli ta
osoba jest managerem, wywietl informacj o jego imieniu i nazwisku oraz iloci
osb podlegajcych. Jeli nie jest wypisz na ekranie imi, nazwisko oraz informacj
Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.
137/140

e nie jest niczyim managerem.


67. Przerb blok z powyszego wiczenia w taki sposb:
- jeli pracownik jest managerem 1 osoby procedura ma wywietla informacj "kierownik"
- jeli pracownik jest managerem 3 lub wicej osb procedura ma wywietla informacj
"manager"
- jeli pracownik jest managerem 5 lub wicej osb procedura ma wywietla informacj
"dyrektor"
jeli pracownik nie jest niczyim managerem procedura ma wywietla informacj
"pracownik"

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 procedury i funkcje informacje rozszerzone


73. Stwrz procedur ktra bdzie przyjmowaa dwa parametry. Procedura ma suy
do dodawania wierszy do tabeli regions
74. Stwrz funkcj zwracajc redni zarobkw w caej firmie
75. Stwrz funkcj zwracajc ilo pracownikw w dziale ktrego numer zostanie
podany funkcji jako parametr.
76. Stwrz procedur ktra przy uyciu parametrw wyjciowych zwrci redni,
maksimum i minimum zarobkw w firmie.
Dla ambitnych
77. Stwrz procedur ktra bdzie suya dodawaniu regionw do tabeli regions.
Funkcja ma przyjmowa tylko nazw regionu. Warto trafiajca do klucza
gwnego ma pochodzi ze specjalnie na t okazj stworzonej sekwencji.
78. Stwrz funkcj ktra bdzie zwracaa redni zarobkw firmie, oraz parametrami
wyjciowymi minimum i maksimum tych zarobkw dla dziau ktrego numer bdzie
jej podawany jako parametr wejciowy.

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.

Podstawy SQL i PL/SQL. Bezpatny e-book wersja: 1.1 06-05-2013 www.jsystems.plstr.


140/140

You might also like