You are on page 1of 22

1

Što je PL/SQL?
Oracle PL / SQL je proširenje SQL jezika koji kombinira snagu SQL-a za rukovanje podacima s
procesorskom snagom proceduralnog jezika za stvaranje super moćnih SQL upita. PL/SQL osigurava
besprijekornu obradu SQL naredbi poboljšavanjem sigurnosti, prenosivosti i robusnosti baze
podataka.
PL/SQL znači davanje uputa kompajleru 'što da radi' kroz SQL i 'kako da radi' kroz njegov
proceduralni način. Slično ostalim jezicima baza podataka, daje više kontrole programerima
korištenjem petlji, uvjeta i objektno orijentiranih concepts. PL/SQL puni obrazac je “proširenja
proceduralnog jezika za SQL”.

PL/SQL puni obrazac


PL/SQL je kratica za "proširenja proceduralnog jezika za jezik strukturiranih upita". PL/SQL je Oracle
Korporacijsko proširenje postupka za SQL a Oracle relacijska baza podataka. To je visokoučinkovit,

visoko integriran jezik baze podataka.


PL/SQL blok
 Ovo je komponenta koja ima stvarni PL/SQL kod.
 Sastoji se od različitih odjeljaka za logičnu podjelu koda (deklarativni odjeljak za deklariranje
svrhe, izvršni odjeljak za obradu izjava, odjeljak za rukovanje iznimkama za rukovanje
pogreškama)
 Također sadrži SQL instrukcije koje su se koristile za interakciju s poslužiteljem baze
podataka.
 Sve PL/SQL jedinice tretiraju se kao PL/SQL blokovi, a ovo je početna faza architekstura koja
služi kao primarni ulaz.
PL/SQL motor
 PL/SQL motor je komponenta u kojoj se odvija stvarna obrada kodova.
 PL/SQL mehanizam odvaja PL/SQL jedinice i SQL dio u ulazu (kao što je prikazano na slici
ispod).
 Odvojenim PL/SQL jedinicama upravljat će sama PL/SQL mašina.
 SQL dio će biti poslan poslužitelju baze podataka gdje se odvija stvarna interakcija s bazom
podataka.
 Može se instalirati i na poslužitelj baze podataka i na aplikacijski poslužitelj.
Poslužitelj baze podataka
 Ovo je najvažnija komponenta Pl/SQL jedinice koja pohranjuje podatke.
 PL/SQL motor koristi SQL iz PL/SQL jedinica za interakciju s poslužiteljem baze podataka.
 Sastoji se od SQL izvršitelja koji analizira ulazne SQL naredbe i izvršava iste.

Značajke i prednosti PL/SQL


1. Bolja izvedba, budući da se SQL izvodi skupno umjesto jedne izjave
2. Visoka produktivnost
3. Uska integracija sa SQL-om
4. Potpuna prenosivost
5. Čvrsta sigurnost
6. Podržava objektno orijentirano programiranje concepts.
7. Skalabilnost i upravljivost
8. Podržava razvoj web aplikacija
9. Podržava razvoj stranice poslužitelja

Nedostaci PL/SQL
1. Pohranjene procedure u PL/SQL-u koriste veliku količinu memorije
2. Nedostaje otklanjanje pogrešaka u funkcionalnosti u pohranjenim procedurama
3. Svaka promjena u osnovnoj bazi podataka također zahtijeva promjenu u prezentacijskom
sloju
4. Ne odvaja u potpunosti uloge back-end programera i front-end programera
2

5. Teško je odvojiti HTML razvoj od PL/SQL razvoja

PL/ SQL blok: STRUKTURA, Sintaksa, ANONIMNO


Što je PL/SQL blok?
U PL/SQL kod se ne izvršava u formatu jednog retka, već se uvijek izvodi grupiranjem koda u jedan
element koji se zove blokovi. U ovom ćete vodiču naučiti o tim blokovima.
Blokovi sadrže i PL/SQL kao i SQL instrukcije. Sve ove instrukcije bit će izvršene kao cjelina, a ne
izvršavanje jedne po jedne instrukcije.

Blok struktura
PL/SQL blokovi imaju unaprijed definiranu strukturu u kojoj se kod grupira. Ispod su različiti dijelovi
PL/SQL blokova.
1. Odjeljak deklaracije
2. Izvršni dio
3. Odjeljak za rukovanje iznimkama
35:04

Odjeljak deklaracije
Ovo je prvi odjeljak PL/SQL blokova. Ovaj odjeljak je neobavezan dio. Ovo je odjeljak u kojem će se
deklarirati deklaracija varijabli, kursora, izuzetaka, potprograma, pragma instrukcija i kolekcija koje su
potrebne u bloku. Ispod je još nekoliko karakteristika ovog dijela.
 Ovaj određeni odjeljak nije obavezan i može se preskočiti ako nisu potrebne deklaracije.
 Ovo bi trebao biti prvi odjeljak u PL/SQL bloku, ako postoji.
 Ovaj odjeljak počinje ključnom riječi 'DECLARE' za okidače i anonimni blok. Za ostale
potprograme ova ključna riječ neće biti prisutna. Umjesto toga, dio nakon definicije naziva
potprograma označava odjeljak deklaracije.
 Nakon ovog odjeljka uvijek treba slijediti odjeljak za izvršenje.
Odjel za izvršenje
Izvršni dio je glavni i obvezni dio koji zapravo izvršava kod koji je napisan unutar njega. Budući da
je PL / SQL očekuje izvršne naredbe iz ovog bloka, to ne može biti prazan blok, tj. trebao bi sadržavati
barem jednu važeću liniju izvršnog koda u sebi. Ispod je još nekoliko karakteristika ovog dijela.
 Ovo može sadržavati i PL/SQL kod i SQL kod.
3

 To može sadržavati jedan ili više blokova unutar sebe kao ugniježđeni blok.
 Ovaj odjeljak počinje ključnom riječi 'BEGIN'.
 Nakon ovog odjeljka treba slijediti ili 'KRAJ' ili odjeljak za rukovanje iznimkama (ako postoji)
Odjeljak za rukovanje iznimkama
Iznimka je neizbježna u programu koji se pojavljuje tijekom izvođenja i rješavanju toga Oracle je
osigurao odjeljak za rukovanje iznimkama u blokovima. Ovaj odjeljak također može sadržavati PL/SQL
izjave. Ovo je izborni odjeljak PL/SQL blokova.
 Ovo je odjeljak u kojem se obrađuje iznimka pokrenuta u bloku izvršenja.
 Ovaj odjeljak je zadnji dio PL/SQL bloka.
 Kontrola iz ove sekcije nikada se ne može vratiti u izvršni blok.
 Ovaj odjeljak počinje ključnom riječi 'IZUZETAK'.
 Nakon ovog odjeljka uvijek treba slijediti ključna riječ 'KRAJ'.
Ključna riječ 'END' označava kraj PL/SQL bloka.

Sintaksa PL/SQL bloka


Ispod je sintaksa PL/SQL blok strukture.

Bilješka: Iza bloka bi uvijek trebao biti '/' koji šalje informaciju kompajleru o kraju bloka.

Vrste PL/SQL blokova


PL/SQL blokovi su uglavnom dvije vrste.
1. Anonimni blokovi
2. Imenovani blokovi
Anonimni blokovi
Anonimni blokovi su PL/SQL blokovi koji nemaju dodijeljena imena. Moraju se kreirati i koristiti u istoj
sesiji jer neće biti pohranjeni na poslužitelju kao objekti baze podataka.
Budući da ih ne treba pohranjivati u bazu podataka, ne trebaju im koraci kompilacije. Oni se pišu i
izvode izravno, a kompilacija i izvođenje odvijaju se u jednom procesu.
Ispod je još nekoliko karakteristika anonimnih blokova.
 Ovi blokovi nemaju naveden referentni naziv.
 Ovi blokovi počinju ključnom riječi 'DECLARE' ili 'BEGIN'.
 Budući da ovi blokovi nemaju nikakvo referentno ime, ne mogu se pohraniti za njih later
Svrha. Moraju se izraditi i izvršiti u istoj sesiji.
 Oni mogu pozivati druge imenovane blokove, ali poziv anonimnom bloku nije moguć jer nema
nikakve reference.
 Može imati ugniježđeni blok u sebi koji može biti imenovan ili anoniman. Također se može
ugniježditi u bilo koje blokove.
4

 Ovi blokovi mogu imati sva tri odjeljka bloka, u kojem je dio za izvođenje obavezan, a druga
dva odjeljka su izborna.
Imenovani blokovi
Imenovani blokovi imaju specifično i jedinstveno ime za sebe. Oni su pohranjeni kao objekti baze
podataka na poslužitelju. Budući da su dostupni kao objekti baze podataka, na njih se može pozivati ili
ih koristiti sve dok su prisutni na poslužitelju. Proces kompilacije za imenovane blokove odvija se
odvojeno tijekom njihovog stvaranja kao objekata baze podataka.
Ispod je još nekoliko karakteristika imenovanih blokova.
 Ovi blokovi se mogu pozvati iz drugih blokova.
 Struktura bloka je ista kao kod anonimnog bloka, osim što nikada neće započeti ključnom
riječi 'DECLARE'. Umjesto toga, počet će s ključnom riječi 'CREATE' koja nalaže kompajleru
da ga stvori kao objekt baze podataka.
 Ovi blokovi mogu biti ugniježđeni unutar drugih blokova. Također može sadržavati
ugniježđene blokove.
 Imenovani blokovi su u osnovi dvije vrste:
1. Postupak
2. funkcija
Naučit ćemo više o tim imenovanim blokovima u temama "Procedura" i "Funkcija" u later udžbenik.

Prvi program PL/SQL: primjer Hello World


18.1M
158
10 Most Common Interview Questions and Answers

Kako napisati jednostavan program koristeći PL/SQL


U ovom odjeljku ćemo napisati jednostavan program za ispis "Hello World" koristeći "Anonimni blok".

Objašnjenje koda:
 Kodna linija 2: Ispisuje poruku “Hello World. . .”

Deklariranje i korištenje varijabli u programu


Ovdje ćemo ispisati "Hello World" pomoću varijabli.

Objašnjenje koda:
5

 Kodna linija 2: Deklaracija varijable “tekst” tipa VARCHAR2 veličine 25


 Kodna linija 4: Dodjeljivanje vrijednosti “Hello World” varijabli “text”.
 Kodna linija 5: Ispis vrijednosti varijable “text”.

Komentari u PL/SQL
Komentiranje koda jednostavno upućuje kompilator da zanemari taj određeni kod od izvršavanja.
Komentar se može koristiti u programu za povećanje čitljivosti programa. U PL/SQL kodovi se mogu
komentirati na dva načina.
 Korištenje '–' na početku retka za komentiranje tog određenog retka.
 Korištenjem '/*…….*/' možemo koristiti više redaka. Simbol '/*' označava početak komentara,
a simbol '*/' označava kraj komentara. Kod između ova dva simbola kompajler će tretirati kao
komentare.
Primjer: U ovom primjeru ispisat ćemo 'Hello World' i također ćemo vidjeti kako se komentirani redovi
ponašaju u kodu

Oracle PL/SQL IF THEN ELSE izjava: ELSIF, NESTED-IF


IF-THEN izjava
Naredba IF-THEN se uglavnom koristi za izvršavanje određenog dijela kodova samo kada je uvjet
zadovoljen.
Sintaksa za IF THEN izjave:
IF <condition: returns Boolean>
THEN
-executed only if the condition returns TRUE
<action_block>
END if;
 U gornjoj sintaksi, ključna riječ 'IF' će biti popraćena uvjetom koji daje vrijednost
'TRUE'/'FALSE'.
 Kontrola će izvršiti samo ako se stanje vrati .
 U slučaju uvjeta procjenjuje se na tada će SQL preskočiti , i počet će izvršavati kod pored
bloka 'END IF'.
Bilješka: Kad god se uvjet procijeni na 'NULL', tada će SQL tretirati 'NULL' kao 'FALSE'.
Primjer 1: U ovom primjeru ćemo ispisati poruku kada je broj veći od 100. Za to ćemo izvršiti
sljedeci kod
DECLARE
a NUMBER :=10;
BEGIN
dbms_output.put_line(‘Program started.' );
IF( a > 100 ) THEN
dbms_output.put_line('a is greater than 100');
END IF;
dbms_output.put_line(‘Program completed.');
END;
6

/
Objašnjenje koda:
 Redak koda 2: Deklaracija varijable 'a' kao tipa podataka 'BROJ' i njeno inicijaliziranje s
vrijednošću '10'.
 Redak koda 4: Ispis izjave “Program je pokrenut”.
 Redak koda 5: Provjera uvjeta, je li varijabla 'a' veća od '100.'
 Redak koda 6: Ako je 'a' veće od '100', tada će se ispisati "a je veće od 100". Ako je 'a' manje
od ili jednako 100, tada uvjet ne ispunjava, tako da se gornji iskaz za ispis zanemaruje.
 Redak koda 8: Ispis izjave "Program dovršen".
Izlaz koda:
Program started.
Program completed.
Primjer 2: U ovom primjeru, ispisat ćemo poruku ako je zadana abeceda prisutna u engleskim
samoglasnicima (A, E, I, O, U).
DECLARE
a CHAR(1) :=’u’;
BEGIN
IF UPPER(a) in ('A’,'E','I','0','U' ) THEN
dbms_output.put_line(‘The character is in English Vowels');
END IF;
END;
/
Objašnjenje koda:
 Redak koda 2: Deklaracija varijable 'a' kao 'CHAR' tipa podataka veličine '1' i njeno
inicijaliziranje s vrijednošću 'u'.
 Redak koda 4: Provjera uvjeta, da li je varijabla 'a' prisutna u listi ('A','E','I','O','U').
 Vrijednost 'a' pretvorena je u velika slova prije usporedbe kako bi usporedba bila neosjetljiva
na velika i mala slova.
 Redak koda 5: Ako je 'a' prisutan na popisu, tada će se ispisati izjava "Znak je u engleskim
samoglasnicima". Ako uvjet nije uspio, tada ovaj program neće dati nikakav izlaz, budući da
izvan bloka IF-THEN nismo izdali nikakvu naredbu za ispis.
Izlaz koda:
The character is in English Vowels

Izjava IF-THEN-ELSE
 Izjava IF-THEN-ELSE uglavnom se koristi za odabir između dvije alternative na temelju
uvjeta.
 Ispod je prikaz sintakse izjave IF-THEN-ELSE.
Sintaksa za izjave IF-THEN-ELSE:
IF <condition: returns Boolean>
THEN
-executed only if the condition returns TRUE
<action_blockl>
ELSE
-execute if the condition failed (returns FALSE)
<action_block2>
END if;
 U gornjoj sintaksi, ključna riječ 'IF' će biti popraćena uvjetom koji daje vrijednost
'TRUE'/'FALSE'.
 Kontrola će izvršiti samo ako se stanje vrati .
 U slučaju stanja procjenjuje na tada će se SQL izvršiti .
 U svakom slučaju, izvršit će se jedan od dva akcijska bloka.
Bilješka: Kad god se uvjet ocijeni kao 'NULL', tada će SQL tretirati 'NULL' kao 'FALSE'.
7

Primjer 1: U ovom primjeru ispisat ćemo poruku bez obzira na to je li navedeni broj neparan ili
paran.
DECLARE
a NUMBER:=11;
BEGIN
dbms_output.put_line (‘Program started');
IF( mod(a,2)=0) THEN
dbms_output.put_line('a is even number' );
ELSE
dbms_output.put_line('a is odd number1);
END IF;
dbms_output.put_line (‘Program completed.’);
END;
/
Objašnjenje koda:
 Redak koda 2: Deklaracija varijable 'a' kao tipa podataka 'BROJ' i njeno inicijaliziranje s
vrijednošću '11'.
 Redak koda 4: Ispis izjave “Program je pokrenut”.
 Redak koda 5: Provjera uvjeta je li modul varijable 'a' prema '2' jednak 0.
 Redak koda 6: Ako je '0', tada će se ispisati "a je paran broj".
 Redak koda 7: Ako vrijednost modula nije jednaka '0', tada se vraća uvjet , pa će se ispisati
poruka "a je neparan broj".
 Redak koda10: Ispis izjave "Program dovršen"
Izlaz koda:
Program started.
a is odd number
Program completed.

Izjava IF-THEN-ELSIF
 Izjava IF-THEN-ELSIF uglavnom se koristi kada treba izabrati jednu alternativu iz skupa
alternativa, gdje svaka alternativa ima svoje uvjete koje treba zadovoljiti.
 Prvi uvjeti koji se vraćaju će se izvršiti, a preostali uvjeti će biti preskočeni.
 Izjava IF-THEN-ELSIF može sadržavati blok 'ELSE' u sebi. Ovaj 'ELSE' blok će se izvršiti ako
niti jedan od uvjeta nije zadovoljen.
bilješke: ELSE blok je neobavezan u ovoj uvjetnoj izjavi. Ako nema bloka ELSE i niti jedan od uvjeta
nije zadovoljen, kontroler će preskočiti sve akcijske blokove i započeti s izvršavanjem preostalog dijela
koda.
Sintaksa za IF-THEN-ELSIF izjave:
IF <conditionl: returns Boolean>
THEN
-executed only if the condition returns TRUE <
action_blockl>
ELSIF <condition2 returns Boolean> <
action_block2>
ELSIF <condition3:returns Boolean> <
action_block3>
ELSE —optional
<action_block_else>
END if;
 U gornjoj sintaksi, kontrola će izvršiti samo ako se uvjet1 vrati .
 Ako uvjet1 nije zadovoljen, regulator će provjeriti uvjet2.
 Kontroler će izaći iz IF-naredbe u nastavkuwing dva slučaja.
 Kada kontroler pronađe bilo koji uvjet koji se vraća . U tom slučaju, izvršit će se odgovarajući
action_block i kontroler će izaći iz ovog bloka IF-naredbe i započet će izvršavanje preostalog
koda.
8

 Kada niti jedan od uvjeta nije zadovoljen, then kontroler će izvršiti ELSE blok ako postoji, a
zatim će izaći iz IF-naredbe.
Bilješka: Kad god se uvjet ocijeni kao 'NULL', tada će SQL tretirati 'NULL' kao 'FALSE'.
Primjer 1: Bez bloka ELSE
U ovom primjeru ispisat ćemo ocjenu na temelju zadanih ocjena bez drugih uvjeta (oznaka >= 70
ocjena A, ocjena >=40 i ocjena <70 ocjena B, ocjena >=35 i ocjena <40 ocjena C).
DECLARE
mark NUMBER :=55;
BEGIN
dbms_output.put_line(‘Program started.’ );
IF( mark >= 70) THEN
dbms_output.put_line(‘Grade A’);
ELSIF(mark >= 40 AND mark < 70) THEN
dbms_output.put_line(‘Grade B');
ELSIF(mark >=35 AND mark < 40) THEN
dbms_output.put_line(‘Grade C’);
END IF;
dbms_output.put_line(‘Program completed.’);
END;
/
Objašnjenje koda:
 Redak koda 2: Deklaracija varijable 'oznaka' kao tipa podataka 'BROJ' i njeno inicijaliziranje s
vrijednošću '55'.
 Redak koda 4: Ispis izjave “Program je pokrenut”.
 Redak koda 5: Provjera uvjeta1, je li 'oznaka' veća ili jednaka 70.
 Redak koda 7: Budući da uvjet1 nije uspio, provjerava se uvjet2 '70>oznaka>=40′.
 Redak koda 8: Condtition2 se vraća , stoga će se ispisati poruka 'Ocjena B'.
 Redak koda12: Ispis izjave "Program dovršen".
 U ovom slučaju, uvjet3 'oznaka < 35' bit će preskočen, jer je kontroler pronašao jedan uvjet
koji vraća prije uvjeta3.
Izlaz koda:
Program started.
Grade B
Program completed.
Primjer 2: S blokom ELSE
U ovom primjeru ispisat ćemo ocjenu na temelju zadanih ocjena s drugim uvjetom (oznaka >= 70
ocjena A, ocjena >=40 i ocjena <70 ocjena B, ocjena >=35 i oznaka <40 ocjena C, inače 'Bez ocjene').
DECLARE
mark NUMBER :=25;
BEGIN
dbms_output.put_line(‘Program started.’ );
IF( mark >= 70) THEN
dbms_output.put_line(‘Grade A’);
ELSIF(mark >= 40 AND mark < 70) THEN
dbms_output.put_line(‘Grade B');
ELSIF(mark >=35 AND mark < 40) THEN
dbms_output.put_line(‘Grade C);
ELSE
dbms_output.put_line(‘No Grade’);
END IF;
dbms_output.put_line(‘Program completed.' );
END;
/
Objašnjenje koda:
 Redak koda 2: Deklaracija varijable 'oznaka' kao tipa podataka 'BROJ' i njeno inicijaliziranje s
vrijednošću '25'.
9

 Redak koda 4: Ispis izjave “Program je pokrenut”.


 Redak koda 5: Provjera uvjeta 1, je li 'oznaka' veća ili jednaka 70.
 Redak koda 7: Budući da uvjet1 nije uspio, provjerava se uvjet2 '70>oznaka>=40′.
 Redak koda 8: Budući da uvjet2 nije uspio, provjerava se uvjet3 '40>oznaka>=35′.
 Redak koda 11: Budući da svi uvjeti nisu ispunjeni, kontrola će sada provjeriti prisutnost ELSE
bloka i ispisati poruku 'No Grade' iz ELSE bloka.
 Redak koda14: Ispis izjave "Program dovršen".
Izlaz koda:
Program started.
No Grade
Program completed.

Što je naredba CASE?


Naredba CASE slična je naredbi IF-THEN-ELSIF koja odabire jednu alternativu na temelju uvjeta iz
dostupnih opcija.
 Izjava CASE koristi "selektor" umjesto Booleovog izraza za odabir niza.
 Vrijednost izraza u naredbi CASE tretirat će se kao selektor.
 Izraz može biti bilo koje vrste (aritmetika, varijable, itd.)
 Svakoj se alternativi dodjeljuje određena unaprijed definirana vrijednost (selektor), a alternativa s
vrijednošću selektora koja odgovara vrijednosti uvjetnog izraza bit će izvršena.
 Za razliku od IF-THEN-ELSIF, naredba CASE također se može koristiti u SQL naredbama.
 Blok ELSE u naredbi CASE sadrži sekvencu koju je potrebno izvršiti kada nije odabrana nijedna
od alternativa.

00:12
35:04

Primjer 1: Aritmetičko računanje korištenjem velikih i malih slova


U ovom primjeru, izvršit ćemo aritmetički izračun između dva numbers 55 i 5.
DECLARE
a NUMBER :=55;
b NUMBER :=5;
arth_operation VARCHAR2(20) :='MULTIPLY’;
BEGIN
dbms_output.put_line(‘Program started.' );
CASE (arth_operation)
WHEN ‘ADD’ THEN dbms_output.put_line(‘Addition of the numbers are: '|| a+b );
WHEN ‘SUBTRACT' THEN dbms_output.put_line(‘Subtraction of the numbers are: '||a-b );
WHEN ‘MULTIPLY' THEN dbms_output.put_line(‘Multiplication of the numbers are: '|| a*b
);
WHEN ‘DIVIDE' THEN dbms_output.put_line(‘Division of the numbers are:'|| a/b);
ELSE dbms_output.put_line(‘No operation action defined. Invalid operation');
END CASE;
dbms_output.put_line(‘Program completed.' );
END;
/
Objašnjenje koda
 Redak koda 2: Deklaracija varijable 'a' kao tipa podataka 'BROJ' i njeno inicijaliziranje s
vrijednošću '55'.
 Redak koda 3: Deklaracija varijable 'b' kao tipa podataka 'BROJ' i njeno inicijaliziranje s
vrijednošću '5.'
 Linija koda 4: Deklaracija varijable 'arth_operation' kao tip podataka 'VARCHAR2' veličine 20 i
inicijaliziranje s vrijednošću 'MULTIPLY'.
10

 Redak koda 6: Ispis izjave “Program je pokrenut”.


 Linija koda 7: CASE provjerava vrijednost izraza. U ovom slučaju, vrijednost varijable
'arth_operation' je 'MNOŽITI'. Ova vrijednost će se sada tretirati kao selektor za ovaj CASE
izraz.
 Redak koda 10: klauzula WHEN s vrijednošću 'MULTIPLY' odgovara vrijednosti selektora,
stoga će kontroler odabrati ovaj action_block i ispisati poruku 'Množenje numbers su: 275'.
 Linija koda 13: Označava kraj naredbe CASE.
 Redak koda14: Ispis izjave "Program dovršen".
Izlaz koda
Program started.
Multiplication of the numbers are: 275
Program completed.

Vrste petlji u PL/SQL


Osnovna naredba petlje
Ova izjava petlje je najjednostavnija struktura petlje u PL/SQL. Izvršni blok počinje ključnom riječi
'LOOP' i završava ključnom riječi 'END LOOP'.
Izlazni uvjet treba dati unutar ovog izvršnog bloka tako da kontrolira izlaz iz petlje.
Za izlazak iz petlje potrebna je eksplicitna ključna riječ EXIT u dijelu za izvođenje.

Objašnjenje sintakse:
 U gornjoj sintaksi ključna riječ 'LOOP' označava početak petlje, a 'END LOOP' označava kraj
petlje.
 Izvršni blok sadrži sav kod koji se treba izvršiti uključujući uvjet EXIT.
 Izvršni dio može sadržavati bilo koju naredbu o izvršenju.
Bilješka: Osnovna naredba petlje bez ključne riječi EXIT bit će BESKONAČNA PETLJA koja se
nikada neće zaustaviti.
Primjer 1: U ovom primjeru ispisat ćemo brojeve od 1 do 5 koristeći osnovnu naredbu petlje. Za to
ćemo izvršiti following kodirati.
11

Označavanje petlji
U PL/SQL, petlje se mogu označiti. Oznaka treba biti između “<<” i “>>”. Označavanje petlji, posebno
u kodovima ugniježđenih petlji, omogućit će veću čitljivost. Oznaka se može dati u naredbi EXIT za
izlaz iz te određene petlje. Korištenjem oznake, kontrola se može izvesti tako da izravno izađe iz
vanjske petlje ugniježđenih petlji s bilo kojeg mjesta unutar petlji, davanjem naredbe za izlaz nakon
koje slijedi oznaka vanjske petlje.

Objašnjenje sintakse:
 U gornjoj sintaksi, izlazna petlja ima još jednu petlju unutar sebe.
 '< >' i '< >' su oznake ovih petlji.
Primjer 1: U ovom primjeru ispisat ćemo broj počevši od 1 koristeći osnovnu naredbu petlje. Svaki će
se broj ispisati onoliko puta koliko iznosi njegova vrijednost. Gornja granica niza je fiksirana u dijelu
deklaracije programa. Naučimo kako možemo koristiti koncept oznake da to postignemo. Za to ćemo
izvršiti following kod
12

Objašnjenje koda:
 Redak koda 2-3: Deklaracija varijabli 'a' i 'b' kao tipa podataka 'BROJ'.
 Kodna linija 4: Deklaracija varijable 'upper_limit' kao tipa podataka 'NUMBER' s vrijednošću
'4'
 Kodna linija 6: Ispis izjave “Program je pokrenut”.
 Redak koda 7: Vanjska petlja je označena kao "outer_loop"
 Redak koda 9: Vrijednost 'a' se povećava za 1.
 Redak koda 11: Unutarnja petlja je označena kao "unutarnja petlja".
 Redak koda 13: EXIT uvjet koji provjerava je li vrijednost 'a' viša od vrijednosti 'upper_limit'.
Ako ne, onda će ići dalje, inače izlazi izravno iz vanjske petlje.
 Redak koda 14: Ispis vrijednosti 'b'.
 Redak koda 15: Povećava vrijednost 'b' za +1.
 Redak koda 16: EXIT uvjet koji provjerava je li vrijednost 'b' veća od 'a'. Ako je tako, tada će
izaći iz kontrole unutarnje petlje.
 Redak koda 14: Ispis izjave "Program završen"

Oracle PL/SQL umetanje, ažuriranje, brisanje i odabir u


SQL je stvarna komponenta koja se brine za dohvaćanje i ažuriranje podataka u bazi podataka, dok je
PL/SQL komponenta koja obrađuje te podatke.

DML transakcije u PL/SQL


DML je kratica za Jezik za manipulaciju podacima. Ove se izjave uglavnom koriste za obavljanje
aktivnosti manipulacije. Bavi se dolje navedenim operama.
 Umetanje podataka
 Ažuriranje podataka
13

 Brisanje podataka
 Odabir podataka
U PL/SQL-u možemo manipulirati podacima samo pomoću SQL naredbi.

Umetanje podataka
U PL/SQL možemo umetnuti podatke u bilo koju tablicu pomoću SQL naredbe INSERT INTO. Ova
naredba će uzeti naziv tablice, stupac tablice i vrijednosti stupaca kao ulaz i umetnuti vrijednost u
osnovnu tablicu.
Naredba INSERT također može preuzeti vrijednosti izravno iz druge tablice pomoću izjave 'SELECT'
umjesto davanja vrijednosti za svaki stupac. Preko naredbe 'SELECT' možemo umetnuti onoliko
redaka koliko sadrži osnovna tablica.
Sintaksa:
BEGIN
INSERT INTO <table_name>(<column1 >,<column2>,...<column_n>)
VALUES(<valuel><value2>,...:<value_n>);
END;
 Gornja sintaksa prikazuje naredbu INSERT INTO. Naziv tablice i vrijednosti obavezna su
polja, dok nazivi stupaca nisu obavezni ako naredbe za umetanje imaju vrijednosti za sve
stupce tablice.
 Ključna riječ 'VRIJEDNOSTI' obavezna je ako su vrijednosti dane zasebno kao što je gore
prikazano.
Sintaksa:
BEGIN
INSERT INTO <table_name>(<columnl>,<column2>,...,<column_n>)
SELECT <columnl>,<column2>,.. <column_n> FROM <table_name2>;
END;
 Gornja sintaksa prikazuje naredbu INSERT INTO koja preuzima vrijednosti izravno iz pomoću
naredbe SELECT.
 Ključna riječ 'VRIJEDNOSTI' ne bi trebala biti prisutna u ovom slučaju jer se vrijednosti ne
daju zasebno.

Ažuriranje podataka
Ažuriranje podataka jednostavno znači ažuriranje vrijednosti bilo kojeg stupca u tablici. To se može
učiniti pomoću izjave 'UPDATE'. Ova izjava uzima naziv tablice, naziv stupca i vrijednost kao ulaz i
ažurira podatke.
Sintaksa:
BEGIN
UPDATE <table_name>
SET <columnl>=<VALUE1>,<column2>=<value2>,<column_n>=<value_n>
WHERE <condition that uniquely identifies the record that needs to be update>;
END;
 Gornja sintaksa prikazuje AŽURIRANJE. Ključna riječ 'SET' upućuje taj PL/SQL stroj da
ažurira vrijednost stupca danom vrijednošću.
 Klauzula 'WHERE' nije obavezna. Ako ova klauzula nije dana, ažurirat će se vrijednost
navedenog stupca u cijeloj tablici.

Brisanje podataka
Brisanje podataka znači brisanje jednog cijelog zapisa iz tablice baze podataka. U tu svrhu koristi se
naredba 'DELETE'.
Sintaksa:
BEGIN
DELETE
FROM
<table_name>
WHERE <condition that uniquely identifies the record that needs to be update>;
END;
14

 Gornja sintaksa prikazuje naredbu DELETE. Ključna riječ 'FROM' nije obavezna i sa ili bez
klauzule 'FROM' naredba se ponaša na isti način.
 Klauzula 'WHERE' nije obavezna. Ako ova klauzula nije navedena, cijela tablica će biti
izbrisana.

Odabir podataka
Projekcija/dohvaćanje podataka znači dohvaćanje potrebnih podataka iz tablice baze podataka. To se
može postići korištenjem naredbe 'SELECT' s klauzulom 'INTO'. Naredba 'SELECT' dohvatit će
vrijednosti iz baze podataka, a klauzula 'INTO' dodijelit će te vrijednosti lokalnoj varijabli PL/SQL blok.
Ispod su točke koje treba uzeti u obzir u izjavi 'SELECT'.
 Naredba 'SELECT' trebala bi vratiti samo jedan zapis dok se koristi klauzula 'INTO' jer jedna
varijabla može sadržavati samo jednu vrijednost. Ako naredba 'SELECT' vrati više od jedne
vrijednosti, pokrenut će se iznimka 'TOO_MANY_ROWS'.
 Naredba 'SELECT' dodijelit će vrijednost varijabli u klauzuli 'INTO', tako da treba dobiti barem
jedan zapis iz tablice za popunjavanje vrijednosti. Ako nije dobio nikakav zapis, pokreće se
iznimka 'NO_DATA_FOUND'.
 Broj stupaca i njihov tip podataka u klauzuli 'SELECT' trebao bi odgovarati broju varijabli i
njihovim tipovima podataka u klauzuli 'INTO'.
 Vrijednosti se dohvaćaju i popunjavaju istim redoslijedom kako je navedeno u izjavi.
 Klauzula 'WHERE' nije obvezna i omogućuje veća ograničenja zapisa koji će se dohvaćati.
 Izjava 'SELECT' može se koristiti u uvjetu 'WHERE' drugih DML izjava za definiranje
vrijednosti uvjeta.
 Naredba 'SELECT' kada se koriste naredbe 'INSERT', 'UPDATE', 'DELETE' ne bi trebala imati
klauzulu 'INTO' jer u tim slučajevima neće popuniti nijednu varijablu.
Sintaksa:
BEGIN
SELECT <columnl>,..<column_n> INTO <vanable 1 >,. .<variable_n>
FROM <table_name>
WHERE <condition to fetch the required records>;
END;
 Gornja sintaksa prikazuje naredbu SELECT-INTO. Obavezna je ključna riječ 'FROM' koja
identificira naziv tablice iz koje se podaci trebaju dohvatiti.
 Klauzula 'WHERE' nije obavezna. Ako ova klauzula nije navedena, tada će se dohvatiti podaci
iz cijele tablice.
Primjer 1: U ovom primjeru ćemo vidjeti kako izvesti DML operacije u PL / SQL. Umetnut ćemo donja
četiri zapisa u emp tablicu.
EMP_NAME EMP_NO PLAĆA MANAGER
BBB 1000 25000 AAA
XXX 1001 10000 BBB
GGG 1002 10000 BBB
ZZZ 1003 7500 BBB
Zatim ćemo ažurirati plaću 'XXX' na 15000 i izbrisati evidenciju zaposlenika 'ZZZ'. Konačno, projicirati
ćemo details zaposlenika 'XXX'.
15

Izlaz:
Values Inserted
Values Updated
Values Deleted
Employee Detail
Employee Name:XXX
Employee Number:1001
Employee Salary:15000
Employee Manager Name:BBB
Objašnjenje koda:
 Redak koda 2-5: Deklaracija varijable.
 Redak koda 7-14: Umetanje zapisa u emp tablicu.
 Kodna linija 15: Izvršavanje transakcija umetanja.
 Redak koda 17-19: Ažuriranje plaće zaposlenika 'XXX' na 15000
 Kodna linija 20: Izvršavanje transakcije ažuriranja.
 Kodna linija 22: Brisanje zapisa 'ZZZ'
 Kodna linija 23: Izvršavanje transakcije brisanja.
 Redak koda 25-27: Odabir zapisa 'XXX' i popunjavanje u varijablu l_emp_name, l_emp_no,
l_salary, l_manager.
 Redak koda 28-32: Prikaz dohvaćene vrijednosti zapisa.

Što je Trigger u PL/SQL?


TRIGGERI su pohranjeni programi koje pokreće Oracle motor automatski kada se na tablici izvrše
DML naredbe kao što su umetanje, ažuriranje, brisanje ili se dogode neki događaji. Kod koji će se
izvršiti u slučaju okidača može se definirati prema zahtjevu. Možete odabrati događaj na koji treba
aktivirati okidač i vrijeme izvršenja. Svrha okidača je održavanje integriteta informacija u bazi
podataka.
16

Prednosti okidača
 Automatsko generiranje nekih izvedenih vrijednosti stupaca
 Provođenje referencijalnog integriteta
 Zapisivanje događaja i pohranjivanje informacija o pristupu tablici
 Revizija
 Synchronološka replikacija tablica
 Nametanje sigurnosnih ovlaštenja
 Sprječavanje nevažećih transakcija
Vrste okidača u Oracle
Okidači se mogu klasificirati na temelju sljedećeg
 Klasifikacija na temelju Vrijeme
 PRIJE Okidač: Aktivira se prije nego se dogodi navedeni događaj.
 Okidač NAKON: Aktivira se nakon što se dogodi navedeni događaj.
 UMJESTO Okidača: Posebna vrsta. Saznat ćete više o daljnjim temama. (samo za DML)
 Klasifikacija na temelju nivo
 Okidač razine STATEMENT: aktivira se jednom za navedenu naredbu događaja.
 Okidač razine ROW: aktivira se za svaki zapis koji je zahvaćen navedenim događajem.
(samo za DML)
 Klasifikacija na temelju događaj
 DML okidač: aktivira se kada je naveden DML događaj (INSERT/UPDATE/DELETE)
 DDL okidač: aktivira se kada je naveden DDL događaj (CREATE/ALTER)
 Okidač BAZE PODATAKA: pokreće se kada je naveden događaj baze podataka
(PRIJAVA/ODJAVA/POKRETANJE/GAŠENJE)
Kako stvoriti okidač
Ispod je sintaksa za stvaranje okidača.

Objašnjenje sintakse:
 Gornja sintaksa prikazuje različite neobavezne izjave koje su prisutne u stvaranju okidača.
 PRIJE/ POSLIJE odredit će vrijeme događaja.
 INSERT/UPDATE/PRIJAVA/KREIRANJE/itd. odredit će događaj za koji se okidač treba
aktivirati.
 ON klauzula će odrediti na kojem je objektu gore spomenuti događaj valjan. Na primjer, ovo
će biti naziv tablice na kojoj se može dogoditi DML događaj u slučaju DML okidača.
 Naredba “ZA SVAKI RED” odredit će okidač razine REDA.
 WHEN klauzula navest će dodatni uvjet u kojem se okidač treba aktivirati.
 Dio za deklaraciju, dio za izvođenje, dio za rukovanje iznimkama isti je kao onaj kod
ostalih PL/SQL blokovi. Deklaracijski dio i dio za rukovanje iznimkama nisu obavezni.

:NEW i :STARA klauzula


17

U okidaču na razini retka, okidač se aktivira za svaki povezani redak. A ponekad je potrebno znati
vrijednost prije i poslije DML izjave.
Oracle je osigurao dvije klauzule u okidaču na razini RECORD za držanje ovih vrijednosti. Ove
klauzule možemo koristiti za pozivanje na stare i nove vrijednosti unutar tijela okidača.
 :NEW – Sadrži novu vrijednost za stupce osnovne tablice/pogleda tijekom izvršenja okidača
 :OLD – Zadržava staru vrijednost stupaca osnovne tablice/pogleda tijekom izvršavanja
okidača
Ovu klauzulu treba koristiti na temelju DML događaja. Donja tablica će odrediti koja je klauzula važeća
za koju DML izjavu (INSERT/UPDATE/DELETE).
INSERT UPDATE DELETE
NEVAŽEĆE. Nema nove
:NOVI VRIJEDI VRIJEDI vrijednosti u brisanju velikih i
malih slova.
NEVAŽEĆE. U umetnutom
:STAR VRIJEDI VRIJEDI
slučaju nema stare vrijednosti
UMJESTO Okidač
“UMJESTO okidača” je posebna vrsta okidača. Koristi se samo u DML okidačima. Koristi se kada će
se na com dogoditi bilo koji DML događajplex pogled.
Razmotrite primjer u kojem je pogled napravljen od 3 osnovne tablice. Kada se preko ovog prikaza
izda bilo koji DML događaj, on će postati nevažeći jer su podaci preuzeti iz 3 različite tablice. Dakle, u
ovom se koristi okidač INSTEAD OF. Okidač INSTEAD OF koristi se za izravnu izmjenu osnovnih
tablica umjesto za izmjenu pogleda za dati događaj.
Primjer 1: U ovom primjeru, mi ćemo stvoriti complex pogled sa stola s dvije baze.
 Table_1 je prazna tablica i
 Tablica_2 je tablica odjela.
Zatim ćemo vidjeti kako se okidač INSTEAD OF koristi za izdavanje UPDATE izjave o detaljima
lokacije na ovom com-uplex pogled. Također ćemo vidjeti kako su :NEW i :OLD korisni u okidačima.
 Korak 1: Stvaranje tablice 'emp' i 'dept' s odgovarajućim stupcima
 Korak 2: Popunjavanje tablice uzorcima vrijednosti
 Korak 3: Stvaranje prikaza za gore stvorenu tablicu
 Korak 4: ažuriranje prikaza prije okidača umjesto
 Korak 5: Stvaranje okidača umjesto
 Korak 6: ažuriranje prikaza nakon okidača umjesto umjesto
Korak 1) Izrada tablice 'emp' i 'dept' s odgovarajućim stupcima
18

Objašnjenje koda
 Redak koda 1-7: Stvaranje tablice 'emp'.
 Redak koda 8-12: Stvaranje tablice 'dept'.
Izlaz
Tablica je stvorena
Korak 2) Budući da smo izradili tablicu, popunit ćemo ovu tablicu oglednim vrijednostima i stvaranjem
prikaza za gornje tablice.

Objašnjenje koda
 Redak koda 13-19: Umetanje podataka u 'dept' tablicu.
 Redak koda 20-26: Umetanje podataka u 'emp' tablicu.
Izlaz
PL/SQL postupak dovršen
Korak 3) Izrada prikaza za gore stvorenu tablicu.
19

Objašnjenje koda
 Redak koda 27-32: Izrada pogleda 'guru99_emp_view'.
 Redak koda 33: Upit guru99_emp_view.
Izlaz
Prikaz stvoren
IME ZAPOSLENIKA DEPT_NAME LOKACIJA
ZZZ HR SAD
GGG SALES UK
XXX FINANCIJSKA JAPAN
Korak 4) Ažuriranje prikaza prije umjesto okidača.

Objašnjenje koda
 Redak koda 34-38: Ažurirajte lokaciju "XXX" u "FRANCUSKA". Pokrenula je iznimku jer DML
izjave nisu dopušteni u komplex pogled.
Izlaz
ORA-01779: nije moguće modificirati stupac koji se preslikava na tablicu bez očuvanja ključa
ORA-06512: u retku 2
Korak 5)Kako bismo izbjegli pojavu pogreške tijekom ažuriranja prikaza u prethodnom koraku, u ovom
ćemo koraku koristiti "umjesto okidača".
20

Objašnjenje koda
 Redak koda 39: Stvaranje okidača INSTEAD OF za događaj 'UPDATE' na prikazu
'guru99_emp_view' na razini ROW. Sadrži izjavu o ažuriranju za ažuriranje lokacije u
osnovnoj tablici 'dept'.
 Redak koda 44: Naredba ažuriranja koristi ':NEW' i ':OLD' za pronalaženje vrijednosti stupaca
prije i nakon ažuriranja.
Izlaz
Okidač je stvoren
Korak 6) Ažuriranje prikaza nakon okidača umjesto okidača. Sada se pogreška neće pojaviti jer će
"umjesto okidača" upravljati ažuriranjem operacija ove komplex pogled. A kada se kôd izvrši, lokacija
zaposlenika XXX bit će ažurirana u "Francuska" iz "Japana".

Objašnjenje koda:
 Redak koda 49-53: Ažuriranje lokacije "XXX" u "FRANCUSKA". Uspješan je jer je okidač
'UMJESTO'' zaustavio stvarni izraz ažuriranja na prikazu i izvršio ažuriranje osnovne tablice.
 Redak koda 55: Provjera ažuriranog zapisa.
Izlaz:
PL/SQL procedura uspješno završena
IME ZAPOSLENIKA DEPT_NAME LOKACIJA
ZZZ HR SAD
GGG SALES UK
XXX FINANCIJSKA FRANCUSKA
Složeni okidač
Složeni okidač je okidač koji vam omogućuje određivanje radnji za svaku od četiri vremenske točke u
jednom tijelu okidača. Četiri različite vremenske točke koje podržava su sljedeće.
21

 PRIJE IZJAVE – razina


 PRIJE REDA – razina
 POSLIJERED – razina
 NAKON IZJAVE – razina
Omogućuje kombiniranje radnji za različito vrijeme u isti okidač.

Objašnjenje sintakse:
 Gornja sintaksa prikazuje stvaranje okidača 'COMPOUND'.
 Deklarativni odjeljak zajednički je za sve izvršne blokove u tijelu okidača.
 Ova 4 vremenska bloka mogu biti u bilo kojem nizu. Nije obavezno imati sva ova 4 vremenska
bloka. Možemo stvoriti COMPOUND okidač samo za vremena koja su potrebna.
Primjer 1: U ovom primjeru stvorit ćemo okidač za automatsko popunjavanje stupca plaće zadanom
vrijednošću 5000.
22

Objašnjenje koda:
 Redak koda 2-10: Stvaranje složenog okidača. Stvoren je za mjerenje vremena PRIJE
RETKA na razini za popunjavanje plaće sa zadanom vrijednošću 5000. Ovo će promijeniti
plaću na zadanu vrijednost '5000' prije umetanja zapisa u tablicu.
 Redak koda 11-14: Umetnite zapis u 'emp' tablicu.
 Kodna linija 16: Provjera umetnutog zapisa.
Izlaz:
Okidač je stvoren
PL/SQL procedura uspješno završena.
EMP_NAME EMP_NO PLAĆA MANAGER DEPT_BR
HGK 1004 5000 AAA 30
Omogućivanje i onemogućavanje okidača
Okidači se mogu omogućiti ili onemogućiti. Da biste omogućili ili onemogućili okidač, treba dati
naredbu ALTER (DDL) za okidač koji ga onemogućuje ili omogućuje.
Ispod je sintaksa za omogućavanje/onemogućavanje okidača.
ALTER TRIGGER <trigger_name> [ENABLE|DISABLE];
ALTER TABLE <table_name> [ENABLE|DISABLE] ALL TRIGGERS;
Objašnjenje sintakse:
 Prva sintaksa pokazuje kako omogućiti/onemogućiti pojedinačni okidač.
 Druga izjava pokazuje kako omogućiti/onemogućiti sve okidače na određenoj tablici.

You might also like