Вы находитесь на странице: 1из 80

2+.10.

200/
1
11
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 uvod uvod uvod
Baze podataka 2
22
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 uvod uvod uvod
Uvod
Logiko modeliranje pomou dijagrama E-V (entiteti - veze)
ili E-R (Entity Relationship)
Primjer:
Entitet STUDENT sa atributima: ime, prezime, datum roenja, JMBG,
mjesto roenja, itd.
Entiteti UPISNI LIST i PREDMET.
STUDENT i UPISNI LIST su meusobno u vezi (odnosu, relaciji);
takoer i UPISNI LIST i PREDMET,
2+.10.200/
2
33
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 uvod uvod uvod
E-V dijagram je osnova
i uvod za prikaz
podataka u relacijskom
modelu
Objanjenje:
0,1 ili vie studenata predaje
upisni list
1 upisni list pripada pojedinom
studentu
0,1 ili vie predmeta je upisano
na jednom upisnom listu
0,1 ili vie upisnih listova sadri
jedan te isti predmet
++
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 uvod uvod uvod
Veza STUDENT UPISNI LIST je 1 : M
Veza UPISNI LIST PREDMET je M : N
Relacijski model podataka se gradi iz modela E-V
pomou transformacijskih pravila:
- entitet se prikazuje tablicom
- dva entiteta sa vezom 1:M povezana su stranim
kljuem
- za dva entiteta sa vezom M:N formira se novi
entitet
- veza 1:1 meu dva entiteta moe se realizirati ili
da ostanu dvije tablice meusobno povezani
stranim kljuem, ili da se formira jedna
tablica sa svim artibutima.
2+.10.200/
3
55
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 uvod uvod uvod
Relacijski model je
organiziran tako da je
izmeu tablice UPISNI
LIST i tablice PREDMET
dodana tablica UPISUJE.
SQL (Structured Query
Language strukturni
jezik za pretraivanje) je
standardiziran po ISO i
ANSI standardima.
Svi SUBP nastoje to je
vie mogue slijediti
original standard SQL-a,
ali ga i obogauju raznim
dodatnim opcijama.
66
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 uvod uvod uvod
Osnovni objekti u SQL-u su:
- baza podataka (Database)
- tablica (Table) - relacija
- stupac (Column) - atribut
- pogled ili virtualna tablica (View)
- pravilo integriteta (Constraint)
- indeks (Indeks)
- pohranjena procedura (Store Procedure)
- okida (Trigger)
Imena objekata u SQL-u formiraju se iz slova, znaka _ i
znamenki. Prvi znak (od max 18) mora biti slovo.
SQL je neosjetljiv na razliku izmeu velikih i malih slova.
SELECT ime, prezime FROM student
select ime, prezime from student
2+.10.200/
+
//
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 uvod uvod uvod
Struktura scheme baze podataka:
CREATE kreiranje (izrada) nove strukture, npr.
tablice (pogleda, indeksa, procedure, baze )
ALTER promjena ve postojee strukture
DROP - brisanje ve postojee strukture.
Primjer:
CREATE TABLE mjesto
(mjesto_id int IDENTITY CONSTRAINT
PK_MJESTO PRIMARY KEY,
ime_mjesta varchar(30) NOT NULL,
post_br int NULL)
DROP TABLE mjesto
ALTER TABLE mjesto ADD drzava varchar(50)
ALTER TABLE mjesto ALTER COLUMN ime_mjesta varchar (50)
88
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 uvod uvod uvod
Rad sa podacima:
INSERT upis podataka u tablicu (novi zapis)
UPDATE promjena postojeih podataka (u
postojeem zapisu)
DELETE brisanje postojeeg zapisa
SELECT upit nad postojeim podacima
Primjer:
INSERT INTO mjesto (ime_mjesta, post_br, drzava)
VALUES (Mrdua donja, 99999, Neznase)
UPDATE mjesto SET drzava = Hrvatska
WHERE post_br = 99999
DELETE FROM mjesto WHERE post_br IS NULL
SELECT * FROM mjesto WHERE drzava != Hrvatska
2+.10.200/
5
99
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 uvod uvod uvod
Tipovi podataka:
- znakovni ( char(), varchar(), text, )
- binarni ( bit )
- numeriki ( int, smallint, decimal, float, double, )
- datum-vrijeme ( datetime, smalldatetime )
10 10
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SOL (ponavljanje) SOL (ponavljanje) SOL (ponavljanje)
Selekcija podataka
Selekcija dobavljanje podataka vri se SQL izrazom oblika:
SELECT [ALL | DISTINCT] imena_kolona FROM
imena_tablica|logike_veze WHERE uvjetni_izraz
imena_kolona
- zvjezdica (*), predstavlja sve kolone po redoslijedu navedenom kod
formiranja tablice (CREATE TABLE).
- ako lista imena_kolona sadri vie kolona, nazivi kolona se meusobno
odvajaju zarezom.
imena_tablica |logike veze
- nazivi tablica iz kojih se dobavljaju podaci
- logike veze opisuju operacije prirodnog spajanja meu
tablicama ( inner join unutarnja veza,
outer join vanjska veza,
left join lijeva veza ,
right join - desna veza)
uvjetni_izraz
logiki izraz koji definira uvjet po kojem se vri pretraivanje
2+.10.200/
6
11 11
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SOL (ponavljanje) SOL (ponavljanje) SOL (ponavljanje)
inner join - unutarnja veza
Primjer:
left join - lijeva veza
right join - desna veza
SELECT STUDENT.ime_studenta,
STUDENT.prezime_studenta,
MJESTO.naziv_mjesta
FROM MJESTO INNER JOIN STUDENT ON
MJESTO.mjesto_ID = STUDENT.mjesto_preb
outer join - vanjska veza
12 12
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SOL (ponavljanje) SOL (ponavljanje) SOL (ponavljanje)
Uvjetni izrazi
Oblik uvjetnog izraza ima oblik:
Naziv_kolone Predikat Vrijednost
Predikati usporedbe
= jednako <> razliito od
> vee od !> nije vee
< manje od !< nije manje
>= vee ili jednako
<= manje ili jednako
Predikati podruja
BETWEEN
NOT BETWEEN
Predikati liste
IN
NOT IN
Predikati uzorka
LIKE
Predikati nepoznate vrijednosti
IS NULL
IS NOT NULL
Logiki operatori
AND, OR, NOT
Prioritet logikih opratora:
NOT - najvisi prioritet
AND - srednji prioritet
OR - najnizi prioritet
SELECT * FROM MJESTO
WHERE post_br IS NULL
SELECT ime, prezime, sem,
FROM STUDENT INNER JOIN
UPISNI_LIST ON
STUDENT.student_id
= UPISNI_LIST.student_id
WHERE sk_god = 2006/07
AND sem IN (1,3,5)
2+.10.200/
/
13 13
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SOL (ponavljanje) SOL (ponavljanje) SOL (ponavljanje)
Sortiranje izlaznih rezultata
Koristi se izraz ORDER BY, kao dio select instrukcije:
SELECT [ALL | DISTINCT] nazivi_kolona
FROM nazivi_tablica|logike veze
WHERE uvjetni izraz
ORDER BY kolone_sortiranja
Sintaksa:
ORDER BY naziv_kolone tip_sortiranja, naziv_kolone tip_sortiranja,...
Agregatne funkcije
Generiraju zbirne(skupne) vrijednosti nad pojedinim kolonama tablice,
koriste se u SELECT izrazu.
SUM zbroj AVG- prosjek MIN-minimum
MAX-maximum COUNT- pobrojavanje
Agregatne funkcije SUM i AVG mogu se koristiti samo za numerike
tipove podataka.
1+ 1+
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SOL (ponavljanje) SOL (ponavljanje) SOL (ponavljanje)
Grupni upiti
Odreuje grupe po kojima se dijele izlazni rezultati:
SELECT [ALL | DISTINCT] nazivi kolona, agregatne kolone
FROM nazivi_tablica| join veze
[WHERE uvjetni izraz]
[GROUP BY nazivi kolona]
[HAVING uvjetni izraz]
[ORDER BY sort_izraz]
HAVING uvjetni izraz
Ogranienje izlaznih rezultata po
zadanom uvjetu nakon izvrenja
GROUP BY operacije.
Osnovna razlika izmedu WHERE i HAv!NG izraza:
- WHERE izraz ogranicava izlazne rezultate prije
njihovog grupiranja tj. uvjetuje broj redova koji
ulaze u grupiranje
- HAv!NG izraz postavlja uvjet na izlazne rezultate
nakon sto je grupiranje zavrseno.
SELECT STUDENT.student_id, ime, prezime, COUNT(sem)
FROM STUDENT INNER JOIN UPISNI_LIST
ON STUDENT.student_id = UPISNI_LIST.student_id
GROUP BY STUDENT.student_id, ime, prezime
HAVING SK_GOD > 2004/05
2+.10.200/
8
15 15
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SOL (ponavljanje) SOL (ponavljanje) SOL (ponavljanje)
Ugnjedeni upiti - podupiti
Podupit (Subquery) je SELECT izraz ukljuen u glavni SELECT, INSERT,
UPDATE ili DELETE upit.
Pri tome podupit i glavni upit mogu djelovati ne istu tablicu ili na razliite
tablice. Mnogi SQL izrazi koji ukljuuju podupite mogu se realizirati
i stvaranjem upita sa povezivanjem (join).
SELECT [ALL | DISTINCT] nazivi kolona, agregatne kolone
FROM nazivi_tablica| join veze
[WHERE naziv_kolone predikat (subquery)]
Postoje tri osnovna oblika oblika podupita (subqueries):
-podupiti liste na koje se primijenjuje IN predikat - vraa niz rezultata (listu),
koju glavni upit koristi u svom uvjetnom izrazu preko predikata liste
(IN ili NOT IN).
- podupiti sa predikatom usporedbe - rezultat podupita moe se u glavni
upit ukljuiti preko jednog od predikata usporedbe (=,<>,<,....)
- podupiti sa predikatom postojanja - Operator EXISTS ispituje postojanje
podataka uz navedene uvjete
16 16
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SOL (ponavljanje) SOL (ponavljanje) SOL (ponavljanje)
Podupiti liste
Primjer: Prikazati studente upisane u 1. sem k.god 2006/07:
SELECT student_id, ime, prezime
FROM STUDENT
WHERE student_id IN
(SELECT student_id
FROM UPISNI_LIST
WHERE sk_god = 2006/07
AND sem = 1)
ORDER BY prezime, ime
Isti problem moe se realizirati i
primjenom veze (join) izmeu
tablica STUDENT i UPISNI_LIST.
SELECT STUDENT.student_id, ime, prezime
FROM STUDENT INNER JOIN UPISNI_LIST
ON STUDENT.student_id = UPISNI_LIST.student_id
WHERE sk_godine = 2006/07
AND sem = 1
ORDER BY prezime, ime
Izraz se izvrava u dva koraka. Prvo
podupit iz tablice upisni_list vraa
student_id za sve studente koji imaju
upisni list u 1. sem kolske godine
2006/07. Rezultat je lista sa podacima
student_id. Potom glavni upit iz tablice
student vraa podatke o svim
studentima iji se student_id nalazi u
listi koristei predikat liste (IN).
2+.10.200/
9
1/ 1/
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SOL (ponavljanje) SOL (ponavljanje) SOL (ponavljanje)
Podupiti sa predikatom usporedbe
Podupit mora vratiti samo jednu vrijednost; ukoliko podupit vraa vie od
jedne vrijednosti javlja se greka u izvravanju glavnog upita.
Primjer: Prikazati sve studente
koji su roeni u istom mjestu kao
i student x y.
SELECT student_id, ime, prezime
FROM STUDENT
WHERE mjesto_id =
(SELECT mjesto_id
FROM STUDENT
WHERE ime = X
AND prezime = Y)
ORDER BY prezime, ime
Primjer: Prikazati sve upisne listove
za studenta x y osim posljednjega.
SELECT sk_god, sem
FROM UPISNI_LIST
WHERE student_id =
(SELECT student_id
FROM STUDENT
WHERE ime = X
AND prezime = Y)
AND sem <
(SELECT MAX(sem)
FROM UPISNI_LIST
WHERE student_id =
( SELECT student_id
FROM STUDENT
WHERE ime = X
AND prezime = Y))
18 18
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SOL (ponavljanje) SOL (ponavljanje) SOL (ponavljanje)
Podupiti sa predikatom postojanja
Operator EXISTS ispituje postojanje podataka uz navedene uvjete. Podupit
sa predikatom postojanja ne vraa nikakve podatke, ve daje samo rezultat
TRUE ili FALSE.
Primjer: Prikazati sve studente koji nemaju niti jedan upisni list.
SELECT student_id, ime, prezime
FROM STUDENT
WHERE NOT EXISTS (SELECT *
FROM UPISNI_LIST
WHERE STUDENT.student_id = UPISNI_LIST.student_id)
Primjer: Prikazati sva mjesta u kojima je roen neki student.
SELECT *
FROM MJESTO
WHERE EXISTS (SELECT *
FROM STUDENT
WHERE MJESTO.mjesto_id = STUDENT.mjesto_id)
2+.10.200/
10
19 19
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SOL (ponavljanje) SOL (ponavljanje) SOL (ponavljanje)
UNIJA
Operator unije (UNION) definira relacijsku operaciju unije, tj. povezuje
rezultate vie upita u jedinstveni skup rezultata.
Sintaksa:
Upit_1 UNION [ALL] Upit_2...ORDER BY sort
Pri formiranju unije mora vrijediti:
- upiti iji se rezultati uniraju moraju imati jednaki broj izlaznih kolona
- odgovarajue izlazne kolone u upitima koji se povezuju unijom moraju
biti istog tipa podataka.
UNION operator uklanja duplicirane redove rezultata obaju upita.
Ukoliko se eli prikaz svih redova, bez eliminacije duplikata, potrebno je
navesti opciju ALL.
20 20
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SOL (ponavljanje) SOL (ponavljanje) SOL (ponavljanje)
Primjer: Veza outer join sa strane 2.
SELECT STUDENT.ime_studenta,
STUDENT.prezime_studenta, MJESTO.naziv_mjesta
FROM MJESTO INNER JOIN STUDENT ON
MJESTO.mjesto_ID = STUDENT.mjesto_preb
UNION
SELECT STUDENT.ime_studenta,
STUDENT.prezime_studenta, MJESTO.naziv_mjesta
FROM MJESTO left JOIN STUDENT ON MJESTO.mjesto_ID
= STUDENT.mjesto_preb
UNION
SELECT STUDENT.ime_studenta,
STUDENT.prezime_studenta, MJESTO.naziv_mjesta
FROM MJESTO right JOIN STUDENT ON
MJESTO.mjesto_ID = STUDENT.mjesto_preb;
Pitanje: Ako se umjesto UNION stavi
UNION ALL to se dobije (i zato)?
2+.10.200/
11
21 21
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 FUNKC!JE FUNKC!JE FUNKC!JE
FUNKCIJE
SQL ukljuuje veliki broj funkcija koje omoguavaju
izvravanje operacija kojima se vri preoblikovanje izlaznih
rezultata ili formiranje novih kolona izlaznog rezultata iji
sadraj se dobija operacijama nad postojeim kolonama u
tablicama. To su:
- Sistemske funkcije, koje vraaju podatke iz sistemskih tablica
- Funkcije znakovnih podataka koji djeluju nad podacima tipa char,
varchar, binary
- Matematike funkcije koje djeluju na numeriki tip podataka
- Funkcije vezane za datum i vrijeme
- Funkcije konverzije, kojima se jedan tip podataka pretvara u drugi.
Opi oblik primjene funkcija moe se prikazati sintaksom oblika:
SELECT naziv_kolone = funkcija(parametri)
22 22
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 FUNKC!JE znakovnog tipa FUNKC!JE znakovnog tipa FUNKC!JE znakovnog tipa
Funkcije znakovnog tipa podataka
Koriste se u SQL izrazima gdje je potrebno izvravanje odreenih
operacija nad kolonama (atributima) koje sadravaju znakovni
(tekstualni) tip podatka: char, varchar, text.
Povezivanje znakova (concatenation)
Operator povezivanja znakova (nizova) je plus (+). Dva ili vie nizova
povezuju se u jedinstveni znakovni niz. npr.: SELECT ('abc' + 'def')
Primjer: Prikazati popis studenata u
obliku liste sa dvije kolone. Prva
kolona sadrava prezime i ime
studenta, a druga kolona mjesto, ulicu
i dravu preb. studenta.
Upit:
SELECT prezime_studenta, ime_studenta,
naziv_mjesta, ulica, drzava
FROM MJESTO INNER JOIN STUDENT
ON MJESTO.mjesto_ID =
STUDENT.mjesto_preb
Rezultat upita:
2+.10.200/
12
23 23
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 FUNKC!JE znakovnog tipa FUNKC!JE znakovnog tipa FUNKC!JE znakovnog tipa
Upit sa spajanjem atrubuta i ISNULL funkcijom:
SELECT prezime_studenta + + ime_studenta,
naziv_mjesta + , + ulica + , + ISNULL(drzava, )
FROM MJESTO INNER JOIN STUDENT
ON MJESTO.mjesto_ID =
STUDENT.mjesto_preb
Rezultat upita:
Sadraj tablice MJESTO:
Sadraj tablice STUDENT:
Upit sa spajanjem atrubuta:
SELECT prezime_studenta + + ime_studenta,
naziv_mjesta + , + ulica + , + drzava
FROM MJESTO INNER JOIN STUDENT
ON MJESTO.mjesto_ID =
STUDENT.mjesto_preb
Rezultat upita:
2+ 2+
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 FUNKC!JE znakovnog tipa FUNKC!JE znakovnog tipa FUNKC!JE znakovnog tipa
LEFT
Vraa dio znakovnog niza sa lijeve strane, poevi od prvog znaka u
duljini n znakova (prvih n znakova slijeva).
Rezultat funkcije je znakovnog tipa podataka.
Sintaksa: LEFT(niz_znakova, n) n - broj znakova - cjelobrojni podatak
RIGHT
Vraa dio znakovnog niza u duljini n znakova s desne strane (prvih n
znakova sdesna).
Rezultat funkcije je znakovnog tipa podataka.
Sintaksa: RIGHT(niz_znakova, n) n broj znakova cjelobrojni podatak
SUBSTRING
Vraa dio znakovnog niza sa lijeve strane, poevi od zadanog znaka
(start) u duljini n znakova.
Rezultat funkcije je znakovnog tipa podataka.
Sintaksa: SUBSTRING(niz_znakova, start,n)
start pozicija poetnog znaka u nizu cjelobrojni podatak
n broj znakova cjelobrojni podatak
2+.10.200/
13
25 25
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 FUNKC!JE znakovnog tipa FUNKC!JE znakovnog tipa FUNKC!JE znakovnog tipa
LEN
Vraa duljinu znakovnog niza izraenu u broju karaktera, ukljuujui i
razmake.
Rezultat funkcije je cjelobrojni podatak (integer).
Sintaksa: LEN(niz_znakova)
Primjer: Prikazati sve studente kojima prezime poinje sa slovom B.
SELECT STUDENT=PREZIME+' '+IME FROM STUDENT WHERE LEFT(PREZIME,1)=B
Primjer: Prikazati sve studente kojima prezime zavrava sa i.
SELECT STUDENT=PREZIME+' '+IME FROM STUDENT WHERE RIGHT(PREZIME,2)=i
Primjer: Pronai najveu duljinu prezimena za studente prikazane u tablici.
SELECT max(LEN(PREZIME)) FROM STUDENT
Napomena: SUBSTRING(niz_znakova,1,n) = LEFT(niz_znakova,n)
SUBSTRING(niz_znakova,LEN(niz_znakova)-n+1,n)
=RIGHT(niz_znakova,n)
26 26
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 FUNKC!JE znakovnog tipa FUNKC!JE znakovnog tipa FUNKC!JE znakovnog tipa
CHARINDEX
Vraa podatak o poloaju traenog niza znakova unutar nekog niza koji
se pretrauje.
Funkcija se primijenjuje kada se unutar jednog niza znakova trai pojava
drugog niza, a povratni podatak je cijeli broj (integer), koji daje redni broj
znaka u pretraivanom nizu, gdje poinje traeni niz. Ukoliko se traeni
niz ne nalazi unutar pretraivanog funkcija vraa 0.
Sintaksa: CHARINDEX(traeni_niz, pretraivani_niz)
Primjer:
Podatke o imenu i prezimenu studenata izdvojiti u novu tablicu naziva
STUDENT2, na nain da su podaci o imenu i prezimenu objedinjeni.
SELECT PREZ_I_IME = PREZIME + ' ' +IME
INTO STUDENT2
FROM STUDENT
Iz ovako dobijene tablice STUDENT2 potrebno je dobiti podatke o
studentima, gdje su prezime i ime prikazani u odvojenim kolonama
SELECT PREZIME = LEFT(PREZ_I_IME, CHARINDEX(' ',PREZ_I_IME)-1),
IME = RIGHT(PREZ_I_IME, LEN(PREZ_I_IME) -
CHARINDEX(' ',PREZ_I_IME))
FROM STUDENT2
2+.10.200/
1+
2/ 2/
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 FUNKC!JE znakovnog tipa FUNKC!JE znakovnog tipa FUNKC!JE znakovnog tipa
Detaljna analiza upita koji iz jednog polja u kome je uneseno i prezime i ime
izdvaja posebno prezime a posebno ime (pod pretpostavkom da je su
razdvojeni praznim znakom tj. blank-om):
SELECT PREZ_I_IME,
LEN(PREZ_I_IME) AS 'duljina',
CHARINDEX(' ',PREZ_I_IME) AS 'mjesto blank-a',
LEN(PREZ_I_IME)- CHARINDEX(' ',PREZ_I_IME) AS 'duljina zdesna do blank-a',
PREZIME = LEFT(PREZ_I_IME, CHARINDEX(' ',PREZ_I_IME)-1),
IME = RIGHT(PREZ_I_IME, LEN(PREZ_I_IME) - CHARINDEX(' ',PREZ_I_IME))
FROM STUDENT2
28 28
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Funkcije znakovnog tipa Funkcije znakovnog tipa Funkcije znakovnog tipa
LOWER, UPPER
Funkcije koje u nizu znakova (stringu) vre pretvorbu u mala, odnosno
velika slova.
Sintaksa: LOWER(niz_znakova) , UPPER(niz_znakova)
Rezultat ovih funkcija je isti niz znakova koji se proslijeuje kao
agrument funkcije, ali pretvoren u mala (LOWER), odnosno velika
(UPPER) slova.
Primjer: Prikazati podatke o studentima velikim slovima:
SELECT UPPER(PREZIME + ' ' +IME) as studenti
FROM STUDENT
2+.10.200/
15
29 29
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Funkcije znakovnog tipa Funkcije znakovnog tipa Funkcije znakovnog tipa
STR
Funkcija koja pretvara numeriki podatak (broj) u tekstualni podatak
(string)
Sintaksa: STR(numeriki podatak, broj mjesta)
broj mjesta cjelobrojni podatak koji odreuje broj mjesta za prikaz broja.
Rezultat funkcije je tekstualni podatak (string).
LTRIM, RTRIM
Funkcije koje u nizu znakova (stringu) eliminiraju prazna mjesta (blanks)
sa lijeve (LTRIM) i desne (RTRIM) strane teksta.
Sintaksa: LTRIM(niz_znakova) , RTRIM(niz_znakova)
Primjer: Prikazati podatke o ulici u kojoj zive studenti:
SELECT PREZ_IME, LTRIM(Ulica_i_broj} FROM STUDENT2
30 30
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Natematicke funkcije Natematicke funkcije Natematicke funkcije
Matematike funkcije
ABS Vraa apsolutnu vrijednost numerikog podatka
ACOS Arcus cosinus funkcija vraa kut u radijanima
ASIN Arcus sinus funkcija vraa kut u radijanima
ATAN Arcus tangens funcija vraa kut u radijanima
CEILING Vraa najmanji cijeli broj koji je vei ili jednak argumentu
COS Cosinus funkcija argument je kut u radijanima
COT Cotangens funkcija argument je kut u radijanima
DEGREES Funkcija koja vri pretvorbu kuta iz radijana u stupnjeve
FLOOR Vraa najvei cijeli broj manji ili jednak od argumenta
LOG Izraunavanje prirodnog logaritma
LOG10 Izraunavanje logaritma sa bazom 10
PI Vrijednost konstante
RADIANS Funkcija koja vri pretvorbu kuta iz stupnjeva u radijane
SIN Sinus funkcija argument je kut u radijanima
SQUARE Funkcija kvadriranja
SQRT Drugi korijen
TAN Tangens funkcija argument je kut u radijanima
2+.10.200/
16
31 31
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Funkcije datuma i vremena Funkcije datuma i vremena Funkcije datuma i vremena
GETDATE
Funkcija vraa tekui sistemski datum i vrijeme. Sintaksa: GETDATE()
DAY
Funkcija vraa dio datuma koji prikazuje dan u mjesecu (cijeli broj) .
Sintaksa: DAY(datum). Argument je tipa datetime ili smalldatetime.
MONTH
Funkcija vraa dio datuma koji prikazuje mjesec (cijeli broj).
Sintaksa: MONTH(datum). Argument je tipa datetime ili smalldatetime.
YEAR
Funkcija vraa dio datuma koji prikazuje godinu (cijeli broj).
Sintaksa: YEAR(datum). Argument je tipa datetime ili smalldatetime.
Primjer:
SELECT STUDENT.PREZ!NE, STUDENT.!NE,
STUDENT.datum_rodj,
YEAR(STUDENT.datum_rodj) as YEAR,
NONTH(STUDENT.datum_rodj) as NONTH,
DAY(STUDENT.datum_rodj) as DAY
FRON STUDENT;
32 32
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Funkcije datuma i vremena Funkcije datuma i vremena Funkcije datuma i vremena
DATEADD
Funkcija vraa datum koji se dobije kada se na zadani datum doda
odreeni vremenski interval.
Sintaksa: DATEADD(datepart, number, date)
datepart - parametar kojim se odreuje na koji dio datuma se eli dodati
odgovarajui iznos. Za vrijednost ovog argumenta navodi se neka od
konstanti: year, month, day, week
number - iznos koji se dodaje, cjelobrojan podatak
date - datum koji se mijenja, odnosno kojem se eli dodati odreena
vrijednost. Mora biti tipa datetime ili smalldatetime.
Primjer:
U tablici student prikazani su podaci o studentima,
meu njima i datum upisa studenta. Zakonski
odreeni rok za studiranje je 7 godina. Prikazati sve
studente kojima je istekao zakonski rok studiranja.
SELECT PREZIME, IME , DAT_UPISA,
DATEADD(YEAR,7, DAT_UPISA) as Datum isteka
FROM STUDENT
WHERE DATEADD(YEAR,7, DAT_UPISA) < GETDATE()
2+.10.200/
1/
33 33
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Funkcije datuma i vremena Funkcije datuma i vremena Funkcije datuma i vremena
DATEDIFF
Funkcija vraa razliku izmeu dva datuma izraenu u odgovarajuim
vremenskom jedinicama.
Sintaksa: DATEDIFF(datepart, start, end)
datepart - parametar kojim se odreuje vremenska jedinica u kojoj se
prikazuje razlika. Za vrijednost ovog argumenta navodi se neka od
konstanti: year, month, day, week
start - poetni datum
end - zavrni datum.
Primjer:
Dati isti prikaz kao u prethodnom primjeru, koritenjem funkcije DATEDIFF.
SELECT PREZIME, IME , DAT_UPISA,
DAT_ISTEKA=DATEADD(YEAR,7, DAT_UPISA)
FROM STUDENT
WHERE DATEDIFF(YEAR, DAT_UPISA, GETDATE()) >= 7
3+ 3+
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Sistemske funkcije Sistemske funkcije Sistemske funkcije
CASE funkcija
CASE funkcija provjerava niz uvjeta te vraa rezultat u zavisnosti o
zadovoljenosti uvjeta. Ova funkcija primijenjuje se u dva oblika
Jednostavan oblik
CASE izraz
WHEN vrijednost1 THEN rezultat1
WHEN vrijednost2 THEN rezultat2
[...n]
[
ELSE resultat_else
]
END
izraz izraz ija se vrijednost ispituje. Moe biti bilo koji valjani SQL izraz.
vrijednost1, vrijednostn..- vrijednosti s kojima se usporeuje izraz.
Funkcija usporeuje vrijednost izraz sa vrijednostima 1-n navedenim u
WHEN dijelu izraza, te vraa onaj rezultat za koji je zadovoljena jednakost.
U sluaju kada je vrijednost izraza jednaka vrijednostk funkcija vraa
rezultatk. Ukoliko vrijednost izraza nije jednaka niti jednoj od
vrijednosti1-n, funkcija vraa rezultat_else.
2+.10.200/
18
35 35
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Sistemske funkcije Sistemske funkcije Sistemske funkcije
Primjer:
Prikazati popis studenata (prezime i ime) i za studente kojima istjece
pravo studiranja (/ godina od dana upisa) dodati napomenu '!stek prava'
SELECT PREZIME+' '+IME as 'Student', DAT_UPISA,
CASE DATEDIFF(year,DAT_UPISA, getdate(}}
when 7 then 'Istek prava'
else ' '
END as 'Napomena'
FROM STUDENT
36 36
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Sistemske funkcije Sistemske funkcije Sistemske funkcije
Sloeni oblik
Funkcija vraca onaj rezultat za
koji je zadovoljen uvjetni izraz.
Primjer:
Prethodni primjer modificirati tako da se za studente kojima ove godine istjece
pravo studiranja (/ godina od dana upisa) doda napomena '!stek prava ove
godine'. Za studente kojima je to pravo vec isteklo dodati napomenu ' Studentska
prava istekla', a za studente koji jos imaju sva studentska prava prikazati datum
kada istjece pravo studija.
SELECT PREZIME+' '+IME as 'Student', dat_upisa,
CASE
WHEN DATEDIFF(year,DAT_UPISA, getdate(}}=7 THEN 'Istek prava ove godine'
WHEN DATEDIFF(year,DAT_UPISA, getdate(}}>7 THEN 'Studentska prava istekla'
ELSE convert(varchar(15},DATEADD(year, 7, DAT_UPISA}}
END as 'Napomena'
FROM STUDENT
CASE
WHEN uvjetni_izraz1 THEN rezultat1
WHEN uvjetni_izraz2 THEN rezultat2
[...n]
[ ELSE else_rezultat ]
END
2+.10.200/
19
3/ 3/
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Funkcije konverzije Funkcije konverzije Funkcije konverzije
Prilikom primjene operacija nad podacima esti
su sluajevi vrenja pojedinih operacija ili
usporedbe podataka razliitog tipa.
U ovakvim sluajevima SQL mehanizam
ponekad sam automatski vri pretvorbu tipa
podataka.
Npr. Ukoliko se usporeuju podaci tipa int i smallint,
prilikom usporedbe SQL sam vri tzv. implictitnu
konverziju, te nii format podatka (smallint) automatski
pretvara u vii (int) za potrebe vrenja operacije.
Openito u sluajevima ako se dva po tipu
razliita podatka primjenjuju u operaciji,
prioritet tipa podataka odreuje koji tip podataka
se pretvara u drugi.
Podatak sa tipom nieg prioriteta se pretvara u
tip podatka vieg prioriteta.
Funkcije konverzije
Koriste se za pretvaranje podataka iz jednog tipa u drugi.
Tipovi podataka po
priorietu su:
datetime
smalldatetime
float
real
decimal
int
smallint
tinyint
bit
text
timestamp
varchar
char
varbinary
binary
38 38
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Funkcije konverzije Funkcije konverzije Funkcije konverzije
Primjer:
Zadatak je prikazati sva mjesta iz tablice
mjesta i njihove pozivne brojeve.
Telefonski prefiks za pojedino mjesto lako se dobije na nain da se
izdvoje prve dvije znamenke potanskog broja i na poetak doda 0.
Potanski broj je cjelobrojni podatak sa pet znamenki, te se prve dvije
izdvoje dijeljenjem sa 1000.
SELECT NAZIV_MJESTA, '0' + post_br/1000 as 'Pozivni'
FROM MJESTO
Ovakav izraz ne daje ocekivani rezultat.
Operacijom post_br/1000 izdvajaju se prve dvije znamenke
postanskog broja i dobije se medurezultat cjelobrojnog tipa. Taj
medurezultat zbraja se sa znakom '0' (tipa char). Buduci pravilo
prioriteta tipa podataka odreduje da je numericki tip podataka ''visi''
od znakovnog, u ovoj operaciji se znakovni tip podatka pretvara u
numericki.
Zbrajanjem dobijenog medurezultata sa 0, on ostaje nepromijenjen,
tj. rezultat ne daje ocekivanu 0 na pocetku.
2+.10.200/
20
39 39
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Funkcije konverzije Funkcije konverzije Funkcije konverzije
Primjer (nastavak):
U ovakvim sluajevima, kao i u situacijama kada implicitna
pretvorba tipa podataka nije mogua, primijenjuje se funkcija
konverzije (pretvorbe) iz jednog tipa podataka u drugi.
Sintaksa: CONVERT(tip_podataka, izraz)
tip_podataka je oznaka tipa
podataka u koji se pretvara izraz
Rjeenje prethodnog zadatka bilo bi oblika:
SELECT IME_MJESTA,
'0' + CONVERT(varchar(2),post_br/1000) as 'Pozivni'
FROM MJESTO
ili
SELECT IME_MJESTA,
'0' + LEFT(CONVERT(varchar(5),post_br),2) as 'Pozivni'
FROM MJESTO
+0 +0
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Funkcije konverzije Funkcije konverzije Funkcije konverzije
SELECT PREZIME + ' ' + IME as 'Student',
ADRESA + ', ' + CONVERT(varchar(5),POST_BR) + ' ' +
IME_MJESTA as 'Stan'
FROM STUDENT INNER JOIN MJESTO
ON STUDENT.MJESTO_STAN = MJESTO.MJESTO_ID
Primjer:
Dati podatke o studentima u obliku prikaza sa dvije kolone, gdje se
u prvoj koloni nalazi prezime i ime studenta, a u drugoj njegova
puna adresa stanovanja (ulica, naziv mjesta i pot. broj).
2+.10.200/
21
+1 +1
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Funkcije konverzije Funkcije konverzije Funkcije konverzije
SQL mehanizam u veini sluajeva obrade razlicitih tipova podataka
automatski vri pretvorbu u skladu sa prioritetom tipa podatka.
Ipak je potreba koritenja funkcije konverzije vrlo esta.
Osim to prioritet tipa podataka esto ne odgovara potrebama
formiranja izlaznih rezultata, automatska pretvorba moe generirati
pogreke u dohvatu i obradi podataka.
Pogledajmo ovo na primjerima.
Primjer gdje je potrebno prikazati popis mjesta sa pozivnim brojevima:
SELECT NAZIV_MJESTA, '0' + post_br]1000 as 'Pozivni'
FROM MJESTO
Izraz nije davao eljeni rezultat budui u operaciju zbrajanja
(povezivanja) ulaze dva podatka razliita po tipu.
Automatska konverzija oba podatka prevodi u ''vii tip'' cjelobrojni
format.
Kako je znak '0' mogue pretvoriti u cijeli broj rezultat operacije ne
odgovara eljenim potrebama, ali ne generira greku.
+2 +2
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Funkcije konverzije Funkcije konverzije Funkcije konverzije
U primjeru prikaza studenata i njihovih adresa:
SELECT PREZIME + ' ' + IME as 'Student',
ADRESA + ', ' + CONVERT(varchar(5),POST_BR) + ' ' + IME_MJESTA as 'Stan'
FROM STUDENT INNER JOIN MJESTO
ON STUDENT.MJESTO_STAN = MJESTO.MJESTO_ID
kod prikaza adrese potrebno je povezati podatke o adresi (ulica), naziv
mjesta i potanski broj. Pri tome su ulica i naziv mjesta kolone znakovnog
tipa (varchar), a potanski broj cjelobrojnog tipa.
Ako ne koristimo funkciju CONVERT onda operacija povezivanja
(zbrajanja) sve podatke prevodi u tip ''vieg'' prioriteta (cijeli broj). Meutim
budui podaci o ulici i nazivu mjesta sadravaju slova, njih nije mogue
pretvoriti u cijeli broj te se javlja pogreka.
ADRESA + ', ' + POST_BR + ' ' + IME_MJESTA as 'Stan'
2+.10.200/
22
+3 +3
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Funkcije konverzije Funkcije konverzije Funkcije konverzije
Primjer:
Prikazati studente i podatke o roenju. U prvoj koloni dati prezime i ime
studenta, a u drugoj datum i mjesto roenja.
SELECT PREZIME + ' ' + IME as 'Student' ,
CONVERT(varchar(11), DAT_RODENJA) + ', ' + IME_MJESTA as 'Roen'
FROM STUDENT INNER JOIN MJESTO
ON STUDENT. MJESTO_ROD =MJESTO.MJESTO_ID
Za prikaz podatka o roenju studenta potrebno je povezati podatak o
datumu roenja (tipa datum) i naziv mjesta (znakovni tip podataka).
Bez konverzije, prema pravilu prioriteta tipa podataka automatska pretvorba
svela bi oba podatka na tip datuma.
Budui sadraj naziva mjesta ne odgovara formatu prikaza datuma javila bi
se greka. Stoga je potrebno primijeniti eksplicitnu pretvorbu datuma
roenja u niz znakova.
Kako promijeniti format datuma?
++ ++
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Funkcije konverzije Funkcije konverzije Funkcije konverzije
CONVERT(varchar(10), STUDENT.DAT_RODENJA, 104)
CONvERT(varchar(10), STUDENT.DAT_RODENJA, +)
CONVERT(varchar(10), STUDENT.DAT_RODENJA, 103)
2+.10.200/
23
+5 +5
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Pogled (v!EW) Pogled (v!EW) Pogled (v!EW)
POGLED (VIEW)
Pogledi su virtualne tablice, koje se formiraju kao posebna
organizacijska jedinica u bazi podataka.
Osnovne tablice postoje kao stvarne, fizike tablice u bazi
podataka. One imaju svoju definiciju koja je pohranjena u
sistemskom katalogu baze podataka, svoje podatke koji
su pohranjeni na disku i svoje indekse.
Pogled (view), kao virtualna tablica, nema svoje indekse,
niti datoteke s podacima, ali mu korisnik pristupa kao i
svakoj drugoj tablici.
Kreiranje pogleda - Pogled se definira naredbom
CREATE VIEW ime AS
SELECT ...select query
[WITH CHECK]
+6 +6
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Pogled (v!EW) Pogled (v!EW) Pogled (v!EW)
U sklopu definicije pogleda mogue je navesti bilo koji select query,
obini ili grupni uz postojea pravila u okviru SQL-a.
Atributi pogleda imaju iste nazive kao i atributi tablica nad kojima je
pogled definiran.
Primjer:
CREATE VIEW V_UPISNI_LISTAS
SELECT IME, PREZIME, MAT_BR,
UPISANI_SEM, SK_GOD,
OBR_PROG_IME, APSOLVENT
FROM STUDENT INNER JOIN UPISNI_LIST
ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID
INNER JOIN OBR_PROG
ON UPISNI_LIST.OBR_PROG_ID= OBR_PROG.OBR_PROG_ID
Ovaj pogled formiran je nad tablicama STUDENT, UPISNI_LIST i
OBR_PROG, sa izlaznim atributima IME, PREZIME, MAT_BR,
UPISANI_SEM, SK_GOD, OBR_PROG_IME i APSOLVENT.
2+.10.200/
2+
+/ +/
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Pogled (v!EW) Pogled (v!EW) Pogled (v!EW)
Korisnicke tablice (SOL Server)
Pogledi (SOL Server)
+8 +8
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Pogled (v!EW) Pogled (v!EW) Pogled (v!EW)
Pogledu je mogue pristupati kao i svakoj drugoj tablici:
SELECT *
FROM V_UPISNI_LIST
WHERE IME=Goran AND PREZIME=Ban
ORDER BY SK_GOD, UPISANI_SEM
SELECT distinct IME, PREZIME
FROM V_UPISNI_LIST
WHERE UPISANI_SEM=1 AND SK_GOD=2002/03
ORDER BY PREZIME, IME
2+.10.200/
25
+9 +9
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Pogled (v!EW) Pogled (v!EW) Pogled (v!EW)
Preimenovanje atributa pogleda
Prilikom uobiajenog definiranja pogleda, njegovi atributi imaju iste
nazive kao i atributi tablica nad kojima je pogled definiran.
Ako postoji potreba za promjenom naziva pojedinih atributa, to se
moe ostvariti na tri naina:
Uobiajeno pravilo promjene naziva atributa u SELECT
upitima tipa novi_naziv = atribut.
Primjer:
CREATE VIEW V_STUDENTI AS
SELECT IME, PREZIME, SK_GOD, UPISANI_SEMESTAR = UPISANI_SEM
FROM STUDENT INNER JOIN UPISNI_LIST
ON STUDENT.STUDENT_ID =UPISNI_LIST.STUDENT_ID
50 50
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Pogled (v!EW) Pogled (v!EW) Pogled (v!EW)
Koritenjem izraza AS u obliku: atribut AS novi_naziv.
Primjer:
CREATE VIEW V_STUDENTI AS
SELECT IME, PREZIME, SK_GOD, SEM AS UPISANI_SEM
FROM STUDENT INNER JOIN UPISNI_LIST
ON STUDENT.STUDENT_ID =UPISNI_LIST.STUDENT_ID
Navoenjem novih naziva atributa u definiciji pogleda u
obliku
CREATE VIEW naziv_pogleda (nazivi atributa) AS
Primjer:
CREATE VIEW V_STUDENTI (IME, PREZIME, SK_GOD, UPISANI_SEM) AS
SELECT IME, PREZIME, SK_GOD, SEM
FROM STUDENT INNER JOIN UPISNI_LIST
ON STUDENT.STUDENT_ID =UPISNI_LIST.STUDENT_ID
2+.10.200/
26
51 51
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Pogled (v!EW) Pogled (v!EW) Pogled (v!EW)
Auriranje, unos i brisanje podataka u pogledu
Za razliku od stvarnih tablica, mogunosti promjene podataka
u pogledu podlijeu znatnim ogranienjima.
Mijenjanje, unos i brisanje podataka u pogledu nije
dozvoljeno:
- ako je pogled formiran dohvaanjem podataka iz vie
od jedne tablice
- ako je pogled formiran grupnim upitom (group by)
- ako je bilo koji atribut pogleda stvoren pomou
agregatne funkcije
- ako se pri formiranju pogleda koristi opcija DISTINCT
- ako je pogled formiran kao UNION query
- ako je pogled formiran pomou sloenog upita sa
podupitom.
52 52
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Pogled (v!EW) Pogled (v!EW) Pogled (v!EW)
Promjene podataka u pogledu su vrlo ograniena.
Dodatna ogranienja mogu se aktivirati koritenjem izraza WITH
CHECK u definiciji pogleda. Pomou ove opcije provjerava se da li se
unosom ili promjenom podataka naruava struktura pogleda, tj. da li
promjena ili unos podataka zadovoljava uvjet naveden u upitu.
Ako se opcija WITH CHECK ne navede u pogled je mogue unijeti
podatke koji naruavaju strukturu pogleda
Primjer:
CREATE VIEW V1_STUDENT AS
SELECT IME, PREZIME, ROD_DAT
FROM STUDENT
WHERE ROD_DAT>01.01.1980
je pogled koji prikazuje sve studente koji su roeni nakon 1. sijenja
1980. Ovakav pogled moe se aurirati i brisati, budui zadovoljava
sva gore navedena pravila.
Primjer:
INSERT V1_STUDENT VALUES ( Z,D,01.05.1979)
je isto kao
INSERT STUDENT(IME,PREZIME,ROD_DAT) VALUES ( Z,D,01.05.1979)
2+.10.200/
2/
53 53
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Pogled (v!EW) Pogled (v!EW) Pogled (v!EW)
Primjer:
CREATE VIEW V1_STUDENT AS
SELECT IME, PREZIME, ROD_DAT
FROM STUDENT
WHERE ROD_DAT>01.01.1980 WITH CHECK
Uvoenjem opcije provjere (WITH CHECK) naredba:
INSERT V1_STUDENT VALUES ( Z,D,01.05.1979)
nee dati rezultat jer novi podatak koji se unosi ne zadovoljava uvjet
ROD_DAT>01.01.1980.
Uklanjanje pogleda
Pogled se uklanja iz baze podataka naredbom:
DROP VIEW naziv_pogleda
Primjer:
DROP VIEW V1_STUDENT
5+ 5+
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Osnove visekorisnickog rada Osnove visekorisnickog rada Osnove visekorisnickog rada
OSNOVE VIEKORISNIKOG RADA
Zbog veeg broja korisnika koji pristupaju bazama podataka,
administrator baze ima zadatak ograniiti prava pristupa i
koritenja podataka.
Osnovni razlozi ogranienja prava pristupa podacima u bazi
su:
- mogunosti neovlatenog pristupa podacima
- nestruno rukovanje podacima
- mogue zlouporabe.
DBA - Database administrator (Administrator baze podataka),
kao kljuna osoba u odravanju baze podataka je korisnik
najvieg prioriteta, koji ima sva prava pristupa.
2+.10.200/
28
55 55
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Osnove visekorisnickog rada Osnove visekorisnickog rada Osnove visekorisnickog rada
Ovisno o zadacima koje obavljaju pojedini korisnici, DBA
formira nove korisnike u bazi:
ADD USER ime_korisnika: ifra
ime_korisnika (login) korisniko ime koje mora biti
jedinstveno u bazi podataka, tj. nije dozvoljeno da postoje
dva razliita korinika sa istim imenom.
ifra (password) sigurnosna (tajna) ifra, kojom svaki
korisnik potvruje svoj identitet.
Korisnik se dodaje na nivou baze podataka.
Svakom korisniku se mogu dodatno dodijeliti ili ograniiti
prava na koristenje djelova baze podataka.
56 56
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Osnove visekorisnickog rada Osnove visekorisnickog rada Osnove visekorisnickog rada
Dodjeljivanje privilegija (prava)
Prava pristupa pojedinim korisnicima dodjeljuju se naredbom:
GRANT nazivi_prava ON naziv_objekta TO ime_korisnika
nazivi_prava lista prava pristupa podacima
SELECT pravo itanja podataka
UPDATE pravo promjene (auriranja) podataka
DELETE pravo brisanja podataka
INSERT - pravo unosa podataka
naziv_objekta ime objekta (tablice ili pogleda) u bazi na koji se prava
odnose
ime_korisnika naziv korisnika kojem se prava dodjeljuju.
Primjeri:
GRANT SELECT, UPDATE ON STUDENT TO K1
Korisniku K1 dodjeljuje se pravo citanja i promjene podataka u tablici STUDENT
GRANT SELECT, DELETE ON STUDENT TO K2
Korisniku K2 dodjeljuje se pravo citanja i brisanja podataka u tablici STUDENT
2+.10.200/
29
5/ 5/
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Osnove visekorisnickog rada Osnove visekorisnickog rada Osnove visekorisnickog rada
Suavanje pojedinih prava na dijelove tablica i pogleda
Prava promjene i unosa podataka mogue je suziti na
pojedine atribute (kolone) u tablici:
INSERT (lista_atributa) pravo unosa podataka u samo odreene
kolone
UPDATE (lista_atributa) pravo promjene podataka u navedenim
kolonama tablice
Primjer:
GRANT SELECT, UPDATE(Datum, MjestoId) ON STUDENT TO K3
Korisniku K3 dodjeljuje se pravo itanja i pravo promjene datuma i
mjesta roenja u tablici STUDENT.
58 58
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Osnove visekorisnickog rada Osnove visekorisnickog rada Osnove visekorisnickog rada
Kaskadno dodjeljivanje privilegija
Administrator baze podataka moe pojedinim korisnicima,
uz dodjeljivanje prava dati mogunost proslijeivanja tih
prava drugim korisnicima:
GRANT nazivi_prava ON naziv_objekta TO ime_korisnika
WITH GRANT OPTION
Dodjeljivanjem prava uz opciju WITH GRANT OPTION,
korisniku se daje mogunost da po potrebi ta prava
proslijedi drugima.
Primjer:
DBA: GRANT SELECT, UPDATE ON STUDENT TO K1
WITH GRANT OPTION
K1: GRANT SELECT ON STUDENT TO K2
Korisnik K1 proslijeuje svoje pravo itanja podataka korisniku K2.
2+.10.200/
30
59 59
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Osnove visekorisnickog rada Osnove visekorisnickog rada Osnove visekorisnickog rada
Opoziv (uklanjanje prava)
Prava koja su dodijeljena korisnicima mogu se ukloniti sa:
REVOKE nazivi_prava ON naziv_objekta FROM ime_korisnika
Primjer:
REVOKE UPDATE ON STUDENT FROM K1
Prilikom uklanjanja prava mogue je koritenje dodatnih
opcija CASCADE ili RESTRICT.
Primjer:
REVOKE UPDATE ON STUDENT FROM K1 CASCADE
Pravo promjene podataka u tablici STUDENT oduzima se korisniku K1,
ali i svima onima kojima je korisnik K1 to pravo proslijedio.
Primjer:
REVOKE UPDATE ON STUDENT FROM K1 RESTRICT
Pravo promjene podataka u tablici STUDENT oduzima se korisniku K1
samo u sluaju da on to pravo nije nikome proslijedio. Ako je K1
proslijedio pravo UPDATE prikazuju se podaci o korisnicima koji su to
pravo naslijedili.
60 60
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Osnove visekorisnickog rada Osnove visekorisnickog rada Osnove visekorisnickog rada
Ponitavanje prava naslijeivanja
Pravo daljnjeg dodijeljivanja privilegija, koje se daje sa
opcijom WITH GRANT OPTION mogue je ponititi
naredbom:
REVOKE GRANT OPTION FOR nazivi_prava ON naziv_objekta
FROM ime_korisnika
Primjer:
REVOKE GRANT OPTION FOR UPDATE ON STUDENT FROM K1
Korisniku K1 se oduzima pravo da dijeli UPDATE privilegiju drugima,
a ujedno se briu sva UPDATE prava koje je K1 prethodno dodijelio.
Pri tome UPDATE pravo samog korisnika K1 ostaje sauvano.
2+.10.200/
31
61 61
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Osnove visekorisnickog rada Osnove visekorisnickog rada Osnove visekorisnickog rada
Grupiranje korisnika
Radi lakeg i breg dodijeljivanja prava korisnicima koji
rade na istim poslovima i imaju sline potrebe za pristup
pojedinim podacima, korisnici se povezuju u grupe:
CREATE GROUP naziv_grupe FOR USERS (lista_korisnika)
Primjer:
CREATE GROUP KORISNICI FOR USERS (K1, K2, K3)
Dodjeljivanjem prava grupi, prava se dodijeljuju svim korisnicima koji
su lanovi te grupe.
GRANT SELECT, UPDATE ON STUDENT TO KORISNICI
Grupa korisnika moe se naknadno mijenjati dodavanjem
novih ili iskljuenjem nekog od postojeih lanova te grupe:
ALTER GROUP naziv_grupe ADD|DROP USERS (lista_korisnika)
Primjer:
ALTER GROUP KORISNICI ADD USERS (K6)
ALTER GROUP KORISNICI DROP USERS (K2,K3)
62 62
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Skupne SOL instrukcije Skupne SOL instrukcije Skupne SOL instrukcije
SKUPNE SQL INSTRUKCIJE (BATCHES)
Skup, slijed (batch eng. skupina, grupa, gomila, )
SQL instrukcija predstavlja vie SQL instrukcija koje klijent
postavlja na bazu podataka.
Ove SQL instrukcije baza podataka prihvaa kao jedinstveni
skup naredbi i izvravaju se slijedom jedna za drugom po
redoslijedu kako su navedene.
Primjeri:
visestruki SELECT izrazi:
SELECT * FRON STUDENT
SELECT COUNT(*) FRON NJESTO
Stvaranje nove tablice i unos
podataka:
CREATE TABLE test (
Kol1 char(10) NOT NULL,
Kol2 int )
!NSERT test vALUES ('broj 1', 1)
!NSERT test vALUES ('broj 2', 2)
SELECT * FRON test
2+.10.200/
32
63 63
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Skupne SOL instrukcije Skupne SOL instrukcije Skupne SOL instrukcije
SQL kompajler prihvaa niz instrukcija i kompajlira ih jednom
kao cjelinu.
Zbog ove injenice u primjeni slijeda instrukcija postoje
izvjesna ogranienja:
U sklopu slijeda instrukcija ne mogu se primjenjivati
instrukcije kojima se stvaraju procedure, okidai, pravila i
pogledi (CREATE PROCEDURE, CREATE TRIGGER,
CREATE RULE, CREATE VIEW).
Primjena CHECK ogranienja u sklopu formiranja tablice
postaje aktivna tek nakon zavretka svih instrukcija u slijedu.
Nije mogue u istom slijedu izbrisati objekt iz baze, a potom
stvoriti novi istog naziva.
Nije mogue postojeim tablicama dodavati nove kolone i
pristupati novostvorenim kolonama u istom slijedu instrukcija.
6+ 6+
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Skupne SOL instrukcije Skupne SOL instrukcije Skupne SOL instrukcije
Varijable
U SQL sustavima varijable su korisniki definirane jedinice u
kojima se pohranjuju odreene vrijednosti.
Pri tome se razlikuju lokalne i globalne varijable:
Lokalne varijable deklariraju se od strane korisnika i koriste
na nain identian kao u svim viim programskim jezicima.
Globalne varijable predefinirane su od strane SQL sustava i
njima rukuju interni mehanizmi baze podataka.
Lokalne varijable deklariraju se i koriste u sklopu slijeda
SQL instrukcija ili SQL procedura (stored procedures),
koritenjem kljune rijei DECLARE u obliku:
DECLARE @naziv tip_podatka, @naziv2 tip_podatka2, .
2+.10.200/
33
65 65
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Skupne SOL instrukcije Skupne SOL instrukcije Skupne SOL instrukcije
DECLARE @naziv tip_podatka, @naziv2 tip_podatka2, .
naziv: ime varijable. @predstavlja oznaku za lokalnu
varijablu.
Koritenje lokalne varijable mogue je samo u sklopu slijeda
instrukcija ili procedure gdje je ta varijable definirana.
Vrijednost varijabli pridijeljuje se u sklopu select izraza:
SELECT @varijabla = SQL izraz
SELECT izraz kojim se pridijeljuje vrijednost varijable uobiajeno vraa
samo jednu vrijednost (jedan red izlaznog rezultata).
Ako SELECT izraz vraa vie vrijednosti, varijabli se pridijeljuje
posljednja vrijednost.
Ako SELECT izraz ne vraa nikakav rezultat, varijabla zadrava svoju
prethodnu vrijednost.
66 66
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Skupne SOL instrukcije Skupne SOL instrukcije Skupne SOL instrukcije
Primjer:
Slijedom SQL instrukcija prikazati podatke za studenta sa zadanim
JMBG, u formi opisa: ime, prezime i godina studija na kojoj se trenutno
nalazi.
DECLARE @sIme varchar(30), @sPrezime varchar(30),@iSem tinyint
SELECT @sPrezime=PREZIME, @sIme=IME, @iSem=MAX(SEM)
FROM STUDENT INNER JOIN UPISNI_LIST
ON STUDENT. STUDENT_ID = UPISNI_LIST.STUDENT_ID
WHERE JMBG = '2605980385031'
GROUP BY PREZIME, IME
SELECT Opis=@sPrezime+' '+@sIme+' student '
+CONVERT(VARCHAR(5),@iSem/2+@iSem%2)+'. godine'
% (Modulo}
Provides the remainder of one number divided by another.
Syntax
dividend % divisor
Result Types
int
2+.10.200/
3+
6/ 6/
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Skupne SOL instrukcije Skupne SOL instrukcije Skupne SOL instrukcije
68 68
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Skupne SOL instrukcije Skupne SOL instrukcije Skupne SOL instrukcije
Globalne varijable se koriste bez deklariranja, imaju
oznaku @@, njima upravlja sam sustav baze podataka, a
koriste se uglavnom za uvid u sistemske aktivnosti ili
informacije o aktivnostima korisnika u bazi.
Neke od najee koritenih globalnih varijabli su:
@@ERROR Sistemska varijabla koja sadrava brojani
podatak o greki. Ova varijabla se esto koristi za kontrolu
uspjenog obavljanja pojedinih SQL instrukcija.
Ukoliko je SQL instrukcija uspjeno obavljena vrijednost
varijable je 0.
Kod izvravanja svake SQL instrukcije vrijednost ove
varijable se resetira, pa je provjeru greke potrebno obaviti
neposredno nakon instrukcije kojoj se ispituje valjanost.
2+.10.200/
35
69 69
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Skupne SOL instrukcije Skupne SOL instrukcije Skupne SOL instrukcije
@@IDENTITY Sadrava podatak o posljednjoj generiranoj
IDENTITY vrijednosti.
Vrijednost varijable se mijenja nakon svake INSERT ili
SELECT INTO instrukcije.
Ako se unos podataka obavlja u tablici koja ne sadri
IDENTITY kolone ili sistem ne moe generirati novu
vrijednost za IDENTITY kolonu vrijednost @@IDENTITY se
postavlja na null.
Ako se pri obavljanju unosa podataka dogodi greka,
vrijednost @@IDENTITY globalne varijable ne moe se
vratiti na prethodno stanje.
@@ROWCOUNT Sadrava podatak o broju redova na
koje djeluje posljednji SQL izraz.
Svaki izraz koji ne djeluje izravno na podatke (npr. IF izraz)
postavlja vrijednost ove varijable u 0.
/0 /0
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Kontrola programskog toka Kontrola programskog toka Kontrola programskog toka
Kontrola programskog toka (slijeda instrukcija) u SQL-
u provodi se primjenom slijedeih izraza:
Izraz Opis
BEGIN...END Definira blok instrukcija
BREAK Izlaz iz WHILE petlje
CONTINUE Nastavak obrade WHILE petlje
GOTO label Nastavlja izvravanje instrukcija od izraza koji je
oznaen sa label
IF...ELSE Definira uvjetno izvravanje instrukcija
RETURN Bezuvjetni izlaz iz bloka instrukcija
WHILE Ponavlja niz instrukcija dok je postavljeni uvjet
istinit (TRUE)
2+.10.200/
36
/1 /1
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Kontrola programskog toka Kontrola programskog toka Kontrola programskog toka
BEGINEND
Definira blok instrukcija koje se izvravaju zajedno.
Najee se primijenjuje u uvjetnim strukturama tipa IFELSE, gdje je
u zavisnosti od uvjeta potrebno izvravanje veeg broja instrukcija.
Sintaksa: BEGIN
SQL izrazi
END
BEGIN i END izraz moraju se koristiti zajedno (u paru). Jedan bez
drugoga ne mogu biti upotrebljeni u SQL izrazima.
/2 /2
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Kontrola programskog toka Kontrola programskog toka Kontrola programskog toka
IFELSE
Postavlja uvjet na izvravanje SQL izraza.
SQL izraz koji slijedi nakon IF instrukcije i njezinog uvjeta izvrava se
samo ako je uvjet zadovoljen (TRUE).
Opcionalni ELSE izraz definira SQL instrukciju koja se izvrava ako uvjet
nije zadovoljen.
Sintaksa: IF uvjetni_izraz
SQL izraz
[ELSE uvjetni_izraz2
SQL izraz]
uvjetni_izraz izraz Boolovog tipa koji vraa istinu (TRUE) ili neistinu
(FALSE). Ako ovaj izraz sadrava SELECT upit onda taj upit mora biti
naveden u zagradama.
SQL izraz jedna ili vie SQL instrukcija koje se izvravaju u zavisnosti
od toga da li je uvjetni_izraz zadovoljen.
IF i ELSE uvjet pokree izvravanje samo jedne SQL instrukcije.
Ukoliko je potrebno u zavisnosti u uvjetnom izrazu pokrenuti vie SQL
instrukcija, te instrukcije treba definirati kao blok BEGINEND.
2+.10.200/
3/
/3 /3
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Kontrola programskog toka Kontrola programskog toka Kontrola programskog toka
Primjer:
Definirati slijed SQL instrukcija kojima se prikazuju podaci o studentu
(ime, prezime i jmbg), ako je zadano ime i prezime studenta.
Pri tome je potrebno imati na umu slijedee mogunosti:
- student zadanog prezimena i imena ne postoji u tablici
- postoji vie studenata sa istim imenom i prezimenom.
U ovim specijalnim sluajevima slijed SQL instrukcija treba vratiti
odgovarajue obavijesti.
Ako traeni student postoji ispisati njegovo ime, prezime i jmbg.
/+ /+
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Kontrola programskog toka Kontrola programskog toka Kontrola programskog toka
2+.10.200/
38
/5 /5
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Kontrola programskog toka Kontrola programskog toka Kontrola programskog toka
/6 /6
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Kontrola programskog toka Kontrola programskog toka Kontrola programskog toka
2+.10.200/
39
// //
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Kontrola programskog toka Kontrola programskog toka Kontrola programskog toka
Zadatatak je mogue rijeiti i drugim putem (koritenjem globalne
varijable @@ROWCOUNT.
/8 /8
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Kontrola programskog toka Kontrola programskog toka Kontrola programskog toka
RETURN
Predstavlja bezuvjetni kraj slijeda instrukcija (batch) ili procedure. Svi
izrazi koji slijede nakon RETURN ne izvravaju se.
WHILE
Postavlja uvjet na temelju kojeg se izvrava SQL instrukcija ili vie njih
(blok SQL instrukcija) obuhvaenih sa BEGINEND.
Sintaksa: WHILE uvjetni_izraz
{sql_izraz | blok SQL instrukcija}
[BREAK]
{sql_izraz | blok SQL instrukcija}
[CONTINUE]
SQL instrukcija ili blok instrukcija obuhvaenih sa BEGINEND
izvravaju se dok je uvjetni izraz u WHILE dijelu istinit.
Izvravanje SQL instrukcija obuhvaenih WHILE petljom moe se
kontrolirati unutar petlje primjenom instrukcija prekida (BREAK) i
nastavka izvravanja (CONTINUE).
2+.10.200/
+0
/9 /9
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Kontrola programskog toka Kontrola programskog toka Kontrola programskog toka
Primjer:
U tablici prozvoda izvriti poveanje cijene proizvoda sve dok se ne
postigne prosjena cijena to blie 30,00. Pri tome najvia cijena
proizvoda ne smije prijei 50,00.
WHILE (SELECT MAX(cijena) FROM proizvod) < 50
BEGIN
UPDATE proizvod SET cijena = cijena * 2
IF (SELECT AVG(cijena) FROM proizvod) >= 30
BREAK
ELSE
CONTINUE
END
80 80
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Kontrola programskog toka Kontrola programskog toka Kontrola programskog toka
Primjer:
Zadana je tablica ISPIT_GRUPA, koja sadrava podatke o ispitnim
grupama.
U tablici bi za svaku ispitnu grupu trebalo pisati broj ispitne grupe (1-10) i
datum odravanja ispita u ispitnoj grupi.
Napisati instrukcije koje na temelju zadanog datuma ispitnog roka,
unose podatke za ispitne grupe, po sljedeem pravilu:
Poetak ispitnog roka uvijek je u ponedjeljak.
U svakom roku odravaju se ispiti iz 10 ispitnih grupa, pri emu je svaka
ispitna grupa slijedei dan, uz izuzetak subote i nedjelje.
2+.10.200/
+1
81 81
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Kontrola programskog toka Kontrola programskog toka Kontrola programskog toka
. 10 poruka
82 82
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Transakcije Transakcije Transakcije
TRANSAKCIJE (TRANSACTIONS)
Osnovna namjena suvremenih DBMS sustava za rukovanje
bazama podataka je omoguavanje istovremenog rada
veoj grupi korisnika nad istom bazom podataka.
Pri tome jedni unose podatke, drugi ih auriraju, a trei
samo pretrauju.
Kod takvog rada, esti su sluajevi da vie korisnika dohvaa istu grupu
podataka. Pri tome korisnik ima dojam da samo on pristupa podacima,
neovisno od ostalih korisnika.
Transakcija je skup SQL instrukcija koje se izvravaju
zajedno.
Transakcija poinje oznakom BEGIN TRAN, a zavrava
pozitivnim ishodom (izvrenjem transakcije) COMMIT
TRAN, ili negativnim ishodom (ponitenjem transakcije) -
ROLLBACK TRAN.
2+.10.200/
+2
83 83
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Transakcije Transakcije Transakcije
Primjer: head (STUDENT)={student_id, ime, prezime}
student_id =PK(STUDENT), IDENTITY
head(UPISNI_LIST)={ulist_id, student_id, sem,sk_god}
ulist_id=PK(UPISNI_LIST), IDENTITY
8+ 8+
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Transakcije Transakcije Transakcije
Sve instrukcije obuhvaene transakcijom izvravaju se po
principu sve ili nita.
To znai da se, u sluaju prekida transakcije zbog greke u
nekoj od instrukcija, ponitavaju sve akcije koje su
transakcijom obuhvaene.
Prilikom pokretanja transakcije sve akcije koje su njom
obuhvaene, odvijaju se u posebnom dijelu baze, koji se
naziva transakcijski log (transaction log).
U sluaju uspjenog zavretka transakcije, rezultati tj.
podaci koji proizlaze iz transakcije, zapisuju se fiziki na
disk u bazu podataka.
To znai da su rezultati koje je transakcija dala, vidljivi tek
nakon to se stvarno fiziki zapiu u bazu na disku.
2+.10.200/
+3
85 85
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Transakcije Transakcije Transakcije
Sve instrukcije obuhvaene transakcijom izvravaju se po
principu sve ili nita.
To znai da se, u sluaju prekida transakcije zbog greke u
nekoj od instrukcija, ponitavaju sve akcije koje su
transakcijom obuhvaene.
Prilikom pokretanja transakcije sve akcije koje su njom
obuhvaene, odvijaju se u posebnom dijelu baze, koji se
naziva transakcijski log (transaction log).
U sluaju uspjenog zavretka transakcije, rezultati tj.
podaci koji proizlaze iz transakcije, zapisuju se fiziki na
disk u bazu podataka.
To znai da su rezultati koje je transakcija dala, vidljivi tek
nakon to se stvarno fiziki zapiu u bazu na disku.
86 86
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Transakcije Transakcije Transakcije
Sve instrukcije obuhvaene
transakcijom izvravaju se
po principu sve ili nita.
Primjer:
Slanje dnevnog prometa iz
trgovine Trgovina x u centralnu
bazu podataka IS-a.
0. Preduvjet:
0.1. kasa je zakljuena
0.2. dnevni promet je
obraunat
1. Slanje dnevnog prometa
1.1. Provjera je li promet ve poslan (provjera oznake nije poslan)
1.2. itanje podataka iz tablica baze podataka Trgovina x
1.3. Prijava na centralnu bazu podataka
1.4. Upis proitanih podataka u centralnu bazu podataka
1.5. Odjava sa centralne baze podataka
1.6. Upis oznake poslano za poslani dnevni promet u Trgovini x.
jedna
transakcija
2+.10.200/
++
8/ 8/
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Transakcije Transakcije Transakcije
Problem zavisnosti o nepotvrenoj promjeni
(kako bi to izgledalo kada ne bi postojali transakcijski log-ovi)
Promotrimo primjer meuzavisnosti dvaju transakcija na slici:
Transakcija T1 u prvom koraku (trenutak t1) aurira podatke P1. Kada
bi ovi podaci bili odmah fiziki promijenjeni u tablici, tu promijenu mogli
bi vidjeti i drugi korisnici.
U trenutku t2 nastupa transakcija T2, koja ita izmjenjene podatke P1.
Transakcija T1 izvrava se dalje i zavrava ROLLBACK-om, to znai
da se sve akcije te transakcije ponitavaju.
Stoga podaci P1 ostaju u stanju prije promjene.
U ovom sluaju transakcija T2 bi proitala krive podatke!
88 88
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Transakcije Transakcije Transakcije
Uloga transakcijskog log-a kod sistemskih prekida
Raunala na kojima se nalaze baze podataka podlona su
sistemskim prekidima (tzv. soft crash).
Jedan od estih tipova sistemskih prekida je gubitak
napajanja. Nestanak struje se moe dogoditi
- u trenutku izvravanja neke transakcije,
- u trenutku kad se rezultati neke transakcije
zapisuju u bazu podataka na disk.
Kako znati gdje je sustav stao, tj. to je od tekuih
operacija izvreno a to nije?
2+.10.200/
+5
89 89
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Transakcije Transakcije Transakcije
Stanje izvravanja svih
transakcija biljei se u
transakcijskom log-u (Slika).
Nakon odreenog perioda
sustav uvodi kontrolne toke
(checkpoint).
U trenutku kada nastupa checkpoint, pokree se fiziki
zapis podataka u tablicu na disku za sve transakcije
koje su obavljene u log-u, a iji sadraj nije jo zapisan
u bazu.
transakcijski log 1
transakcijski log 2
90 90
Oporavak poinje pregledom checkpoint datoteke i
ustanovljavanjem koje su transakcije bile u tijeku.
Nakon toga slijedi prijelaz u transakcijski log, gdje poinje
pregled onih transakcija koje su zabiljeene u checkpoint
datoteci, kao i svih kasnijih.
Transakcije koje su obavljene u transakcijskom logu, a njihov
rezultat nije zapisan u tablice, pokreu se ponovo (REDO), a
one koje u trenutku prekida nisu bile dovrene uklanjaju se
(UNDO).
Sve transakcije koje su u
tijeku u trenutku uzimanja
checkpointa, pamte se u
posebnoj checkpoint
datoteci. U sluaju prekida u
sustavu, nakon ponovnog
pokretanja, sustav ulazi u
reim oporavka (recovery).
2+.10.200/
+6
91 91
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Transakcije Transakcije Transakcije
Primjer:
Promatra se stanje izvravanja
transakcija u vremenskom periodu
prema slici.
Nastupanjem kontrolne toke
(checkpoint), rezultati svih zavrenih
transakcija (a to je u ovom sluaju
samo T1) zapisuju se fiziki u tablice
baze podataka.
U checkpoint datoteku pohranjuju se
podaci o transakcijama koje su u
trenutku uzimanja kontrolne toke
bile u izvravanju (T2).
Pretpostavka je da sistemski prekid nastupa u trenutku Tf.
Transakcije T2 i T4 jo uvijek nisu zavrene, dok je transakcija T3 izvrena u
transakcijskom logu, ali je neizvjesno da li je njezin sadraj zapisan u bazu.
Kod postupka oporavka, sustav provjerava checkpoint datoteku i utvruje da je u
trenutku posljednje kontrole log-a u tijeku bila transakcija T2. Zatim prelazi u
transakcijski log, te kontrolira stanje transakcije T2 i onih koje su zapoete
poslije T2 (T3 i T4). Budui transakcije T2 i T4 nisu zavrene u transakcijskom
logu, one se ponitavaju, a transakcija T3 se ponavlja.
transakcijski log-ovi
92 92
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Transakcije Transakcije Transakcije
Zakljuavanje podataka u bazi
Svaka transakcija obavlja se u relativnoj izolaciji u odnosu na
druge transakcije, tj. vrijedi pravilo da nitko drugi ne moe
pristupiti podacima koje jedan korisnik mijenja ili brie.
Meutim, podatke koje jedan korisnik ita mogu itati i drugi korisnici, jer
samo itanje podataka ne donosi nikakve promjene na podacima.
Ovakav sustav zatite pristupa podacima realizira se
zakljuavanjem onih dijelova baze podataka nad kojima se
provode pojedine operacije, tj. postavljanjem lokota (lock).
Sustavi baza podataka prepoznaju dvije vrste lokota:
- djeljivi lokot (shared), koji se postavlja na podacima
koji se samo iitavaju (select), i
- ekskluzivni lokot (exclusive), koji se postavlja na
podacima koji se obrauju.
Lokot nad odreenim podacima postavlja SUBP automatski u
zavisnosti o tipu akcije koja se nad podacima provodi.
2+.10.200/
+/
93 93
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Transakcije Transakcije Transakcije
Kada neka transakcija T2 zahtijeva pristup podacima za obradu, ona
ujedno trai lokot nad tim podacima.
Ukoliko iste podatke obrauje neka druga transakcija T1, ona ve dri
lokot nad tim podacima.
Ishod ovakvog stanja zavisi od tipa obrade nad podacima koje
pojedine transakcije vre.
Slika prikazuje meusobne veze meu lokotima, u redovima su
prikazani lokoti koje dri transakcija T1, a po stupcima lokoti koje
zahtjeva transakcija T2.
Iz toga je vidljivo da dvije transakcije mogu pristupiti istim podacima
(D u tablici) jedino ako obje transakcije iskljuivo itaju podatke.
S shared lokot
X exclusive lokot
9+ 9+
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Transakcije Transakcije Transakcije
Problem gubitka auriranih
informacija
Meudjelovanje dvaju transakcija i
nunost primjene lokota moe se
uoiti na slijedeem primjeru dvaju
transakcija:
Primjer pokazuje meudjelovanje dvaju transakcija.
T1 mijenja podatke P1, a T2 trai pristup istim podacima dok T1 jo nije
zavren.
Transakcija T1 primila je podatke P1 u obradu, i izvrila auriranje
podataka P1.
U trenutku t2, pristup istim podacima trai T2, ali T1 jo uvijek traje, to
znai da promjena podataka P1 jo nije zapisana u odgovarajuu tablicu.
Stoga T2 ita prethodno stanje podataka P1 bez promjena koje je
izvrila transakcija T1.
Tek u trenutku t4 zavrava T1 i rezultati transakcije se zapisuju u tablicu.
U trenutku t5 zavrava transakcija T2 koja svoje rezultate zapisuje
fiziki u tablicu, te ponitava promjene koje je izvrila transakcija T1.
2+.10.200/
+8
95 95
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Transakcije Transakcije Transakcije
Rjeenje problema je u primjeni lokota (lock)
U trenutku t1 transakcija T1 dohvaa podatke P1 i na njima postavlja
djeljivi lokot. U trenutku t2 istim podacima pristupa transakcija T2 i
postavlja svoj djeljivi lokot. Transakcija T1 u trenutku t3 treba izvriti
promjenu na podacima, te trai pretvaranje svog djeljivog lokota u
ekskluzivni (X-lock). Taj lokot ne dobija budui transakcija T2 nad istim
podacima dri S-lock. Transakcija T2 takoer trai X-lock, ali bez
uspjeha jer postoji S-lock od strane transakcije T1. Ne dolazi do
gubitka informacija, ali obje transakcije prelaze u stanje ekanja.
Ova pojava se naziva deadlock.
96 96
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Transakcije Transakcije Transakcije
Deadlock:
Dvije transakcije svojim zahtjevima blokiraju jedna drugu, te
onemoguavaju pristup podacima.
Sustavi baza podataka imaju ugraene mehanizme za detekciju
deadlock-a.
Uobiajeni nain razrjeavanja ovakve situacije je prekid jedne od
transakcija, to drugoj omoguava normalan nastavak i izvravanje do
kraja.
2+.10.200/
+9
9/ 9/
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Transakcije Transakcije Transakcije
Razumljivo, deadlock nije zadovoljavajue rjeenje meudjelovanja
transakcija. Umjesto toga interni mehanizmi baze podataka vre
prilagoavanje lokota strukturi same transakcije.
Djelovanje lokota razrjeava ovakve situacije, jer omoguava da se
promjene na podacima odvijaju u relativnoj izolaciji, pa u navedenom
sluaju, transakcija T2 moe pristupiti podacima P1, tek nakon to T1
izvri promjenu, a u tom sluaju transakcija T2, ita stvarne podatke,
dakle nakon njihove promjene.
98 98
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Transakcije Transakcije Transakcije
Nivoi zakljuavanja
Sustav moe postaviti lokot ili na stranicu memorije (page)
ili na cijelu tablicu.
Kad god je to mogue, postavlja se lokot na stranicu.
Razlog je u injenici da takvo postavljanje lokota ini
podatke dostupnijim korisnicima.
Tako istovremeno vie korisnika moe pristupiti podacima
iz iste tablice, ali sa razliitih stranica, a i dohvat podataka
je bri.
2+.10.200/
50
99 99
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
SQL Stored Procedures
U razvoju i obradi baze podataka, esta je potreba
koritenja slijeda instrukcija kojima se vie SQL
instrukcija izvravaju u nizu, kao jedinstvena cjelina.
Veina SQL platformi nudi mogunost pohrane bloka
SQL instrukcija u posebnom obliku nazvanom
procedure (stored procedures).
Ovakve strukture u mnogome olakavaju i ubrzavaju
rad sa bazama i poveavaju efikasnost.
100 100
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Po svom nainu djelovanja i primjeni SQL procedure ne
razlikuju se bitno od uobiajenih procedura koje se koriste u
viim programskim jezicima.
Prihvaaju ulazne parametre (argumente)
Vraaju rezultat obrade u obliku izlaznih parametara
Vraaju rezultat obrade u obliku skupa rezultata
Sadravaju niz SQL programskih instrukcija kojima se
vre operacije nad podacima u bazi
Omoguavaju pozivanje ostalih procedura
Vraaju podatak o statusu izvravanja procedure
2+.10.200/
51
101 101
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
102 102
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Prednosti koritenja SQL procedura oituju se u slijedeem:
Modularno programiranje
Procedure se formiraju jednom, te se mogu pozivati nebrojeno
puta, kad god postoji potreba za obradom koju vri procedura.
Sve eventualne izmjene u proceduri mogu se kreirati
nezavisno od klijentske aplikacije.
Sigurnosni aspekt
Pravo izvravanja SQL procedura moe se dodijeliti nezavisno
od prava izvravanja pojedinih izraza koji su obuhvaeni
procedurom.
2+.10.200/
52
103 103
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Prednosti koritenja SQL procedura oituju se u slijedeem:
Brzina izvravanja
SQL procedure razlikuju se od uobiajenog slijeda SQL
instrukcija, budui se koriste u pre-kompajliranom i
optimiziranom obliku.
- Prvo se definira (napie) procedura.
- Prilikom prvog poziva i izvrenja sve SQL instrukcije koje
su obuhvaene procedurom se kompajliraju i
optimiziraju.
- Procedura se pohranjuje u sistemski katalog baze
podataka, u intrenom obliku tj. u obliku spremnom za
izvravanje.
- Stoga se pri ponovnim pozivanjima i koritenju procedure
koristi izvrni oblik, bez ponovnog kompaliranja i
optimiranja.
10+ 10+
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Prednosti koritenja SQL procedura oituju se u slijedeem:
Smanjenje mrenog prometa
Pri koritenju baze podataka u client-server strukturi,
umjesto slanja veeg broja SQL instrukcija, alje se samo
zahtjev za izvravanje procedure u obliku jedne instrukcije.
SQL procedura stvara se izrazom CREATE PROCEDURE.
Pravo stvaranja procedura ima onaj tko je stvorio bazu
(DB Administrator), a on ta prava moe dodijeliti ostalim
korisnicima.
Procedure predstavljaju posebne objekte u bazi, te u jednoj
bazi ne mogu postojati dvije procedure istog naziva.
Prilikom stvaranja procedure potrebno je definirati:
- Ulazne i izlazne parametre,
- SQL instrukcije kojima se izvravaju operacije u bazi,
- Povratnu vrijednost (status value), kojom se definira status procedure.
2+.10.200/
53
105 105
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
CREATE PROCEDURE naziv_procedure
{@parametar tip_podatka} [= default] [OUTPUT]
{@parametar tip_podatka} [= default] [OUTPUT]
[WITH {RECOMPILE | ENCRYPTION | RECOMPILE,
ENCRYPTION}]
AS
SQL_izrazi [...n]
naziv_procedure - ime SQL procedure
@parametar tip_podatka [= default] [OUTPUT] definicija
parametara (argumenata) procedure.
Moe se definirati od 1 do najvie 255 parametara.
Prvi znak u parametru mora biti znak @ (simbol varijable).
Oznaka tip_podatka predstavlja tip podatka pojedinog
parametra.
106 106
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
- jo o parametrima procedure -
Oznaka default predstavlja inicijalnu vrijednost parametra pri
pozivu (izvravanju) procedure.
Prilikom pozivanja procedure potrebno je navesti
vrijednost za svaki definirani parametar. Ukoliko se
za odreeni parametar navede default vrijednost,
tada se pri izvravanju procedure, za taj parametar
ne mora navesti vrijednost, ve se vrijednost
parametra postavlja na default vrijednost.
Klauzula OUTPUT u definiciji parametra oznaava da se
radi o izlaznom parametru koji vraa informaciju iz
procedure.
2+.10.200/
5+
10/ 10/
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
- jo o definiranju procedure -
WITH {RECOMPILE | ENCRYPTION | RECOMPILE,
ENCRYPTION} opcije
RECOMPILE naznauje da se pri izvravanju procedure
ne koristi prekompajlirana i optimirana struktura procedure
iz sistemskog kataloga baze, ve se procedura pri svakom
izvravanju iznova kompajlira.
ENCRYPTION oznaava sigurnosno kodiranje SQL
procedure, iji sadraj nakon kompajliranja i izvravanja,
postaje kodiran za sve korisnike.
108 108
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Primjer:
Procedura bez ulaznih parametara.
Deklarirati proceduru koja prikazuje podatke o svim studentima
upisanim u 1.semestar kolske godine 2004/05.
CREATE PROCEDURE statistika
AS
SELECT PREZIME, IME, STAN=ISNULL( ADRESA,' ') + ', '+
IME_MJESTA, OBR_PROG_IME
FROM STUDENT INNER JOIN MJESTO
ON STUDENT.MJESTO_STAN=MJESTO.MJESTO_ID
INNER JOIN UPISNI_LIST
ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID
INNER JOIN OBR_PROG
ON UPISNI_LIST.OBR_PROG_ID=OBR_PROG.OBR_PROG_ID
WHERE SK_GOD=2004/05
AND SEM=1
2+.10.200/
55
109 109
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Primjer:
Procedura sa ulaznim parametrima.
Deklarirati proceduru koja prikazuje podatke o svim studentima, gdje su
semestar i kolska godina ulazni parametri.
CREATE PROCEDURE statistika2
@iSem tinyint,
@sSkgod varchar(10)
AS
SELECT PREZIME, IME, STAN= ISNULL(ADRESA,' ') + ', '+
IME_MJESTA, OBR_PROG_IME
FROM STUDENT INNER JOIN MJESTO
ON STUDENT.MJESTO_STAN=MJESTO.MJESTO_ID
INNER JOIN UPISNI_LIST
ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID
INNER JOIN OBR_PROG
ON UPISNI_LIST.OBR_PROG_ID=OBR_PROG.OBR_PROG_ID
WHERE SK_GOD=@sSkgod AND SEM=@iSem
110 110
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Primjer:
Procedura sa izlaznim parametrima.
Deklarirati proceduru koja za zadano mjesto vraa broj studenata koji u
njemu stanuju.
CREATE PROCEDURE stanovanje
@iBroj int OUTPUT,
@sImeMjesta varchar(10)
AS
SELECT @iBroj =count(*)
FROM STUDENT INNER JOIN MJESTO
ON STUDENT.MJESTO_STAN=MJESTO.MJESTO_ID
WHERE IME_MJESTA=@sImeMjesta
2+.10.200/
56
111 111
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Izvravanje procedure pokree se izrazom oblika:
EXEC naziv_procedure parametri
Pri emu se parametri navode kao lista vrijednosti
meusobno odvojenih zarezom, ili u obliku:
@parametar=vrijednost.
Ukoliko se parametri (argumenti) procedure navode u obliku
@parametar=vrijednost, moe ih se navesti u bilo kojem
redoslijedu, budui se u ovakvom obliku tono navodi kojem
parametru se pridijeljuje koja vrijednost.
Ukoliko se parametri navode samo kao vrijednosti, moraju
se navesti u onom redoslijedu u kojem su navedeni kod
stvaranja procedure.
112 112
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
-Kreiranje procedure (CREATE) - samo prvi put
-Editiranje, izmjena i ponovno pohranjivanje - vise puta
-!zvrsavanje procedure - vise puta
Primjer:
!zvrsenje procedure `statistika':
2+.10.200/
5/
113 113
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Primjer: EXEC statistika2 1, '2004/05'
ili EXEC statistika2 @iSem=1,@sSkgod='2004/05'
EXEC statistika2 @iSem=1, @sSkgod='2004/05' je isto kao i
EXEC statistika2 @sSkgod='2004/05', @iSem=1
11+ 11+
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Prilikom navoenja parametara moe se primijeniti bilo koji od
navedenih oblika, ali nije mogua njihova kombinacija.
Drugim rjeima, ako se jedan parametar navede u obliku
@parametar=vrijednost, tada svi parametri moraju biti u tom obliku.
Tako se ne moe navesti:
EXEC statistika2 @iSem=1,'200+/05`
Prilikom izvravanja procedure potrebno je navesti sve parametre, osim
onih za koje je u definiciji procedure navedena default vrijednost.
2+.10.200/
58
115 115
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Ukoliko je procedura definirana sa jednim ili vie izlaznih parametara
(OUTPUT opcija parametra), pri izvravanju procedure takve parametre
potrebno je takoer deklarirati kao izlazne.
Primjer: Jednostavna procedura sa izlaznim parametrom.
116 116
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Ukoliko se pri pozivu procedure neki od parametara deklarira kao izlazni
parametar, a da taj parametar u isto vrijeme nije deklariran kao izlazni u
definiciji procedure, javlja se greka.
Primjer: Neka za izvrenje procedure djeljenje koristimo slijedee
instrukcije:
Ovakav nain pozivanja procedure generira greku budui je varijabla
@var1 deklarirana kao izlazna varijabla (koja preuzima vrijednost iz
procedure), a u definiciji procedure pripadajui parametar @divizor nije
deklariran kao izlazni.
2+.10.200/
59
11/ 11/
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
U sluaju kada je parametar naveden kao izlazni u definiciji procedure,
a nije kod izvravanja procedure, procedura se normalno izvrava, ali
varijabla u pozivu procedure ne prihvaa vrijednost koju procedura alje
kao izlaznu.
Primjer: Neka za izvrenje procedure djeljenje koristimo slijedee
instrukcije:
Iako je u definiciji procedure parametar @kvocijent naveden kao izlazni
parametar, kod poziva procedure @rezultat nije deklariran kao argument
izlaznog tipa.
Procedura se normalno izvrava, ali varijabla @rezultat ne moe prihvatiti
vrijednost koju procedura daje, pa je rezultat NULL.
118 118
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Uz podatke koje procedure vraaju u obliku skupa rezultata i
izlaznih parametara, procedura daje i poseban podatak o
statusu.
Status oznaava je li procedura izvrena ispravno ili je
tijekom izvravanja instrukcija koje su sadrane u proceduri
nastupila pogreka.
Status je podatak cjelobrojnog tipa (integer) i naziva se
povratno stanje procedure (return status).
U sluaju da je procedura zavrena uspjeno (sve instrukcije
obavljene bez greke), vrijednost povratnog stanja je 0.
Ako tijekom izvravanja instrukcija u proceduri nastupi
pogreka, povratno stanje je negativni cijeli broj, kojim je
opisan tip pogreke.
2+.10.200/
60
119 119
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Izvravanje procedure, uz prihvaanje povratnog stanja
procedure vri se instrukcijom oblika:
EXECUTE @lRetStatus = naziv_procedure parametri
gdje je @lRetStatus varijabla cjelobrojnog tipa.
Primjer: Ispis povratnog stanja za proceduru dijeljenja dva broja:
120 120
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Izvravanje procedure zavrava kada se izvri posljednja
instrukcija u proceduri ili izvrenjem naredbe RETURN.
RETURN znai bezuvjetan izlaz iz procedure.
Instrukcije koje slijede nakon naredbe RETURN ne
izvravaju se.
Iako se vrijednost povratnog stanja procedure postavlja
sistemski, korisnik moe definirati i postaviti vlastita
povratna stanja.
Povratno stanje odreuje se dodavanjem cjelobrojnog
podatka naredbi RETURN:
Npr. RETURN 3
2+.10.200/
61
121 121
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Primjer:
Deklarirana je procedura koja prima ulazni podatak JMBG studenta, te vraa
prezime i ime studenta u obliku izlaznog parametra.
U proceduri se ispituje valjanost ulaznog podatka, te dobiveni rezultat pretraivanja
i temeljem toga formiraju vrijednosti povratnog stanja.
122 122
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Primjer nastavak:
U koritenju procedure potrebno je prihvatiti povratno stanje te na temelju tih
vrijednosti formirati prikaz rezultata korisniku.
2+.10.200/
62
123 123
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Prilikom obrade baza podataka, esta je potreba za ugnjeivanjem
SQL procedura (gdje jedna procedura poziva drugu i koristi njezine
rezultate).
Primjer: Deklarirati proceduru O_STUDENTU1 koja prima ulazni podatak JMBG
studenta, te poziva proceduru O_STUDENTU:
Izvrenje procedure O_STUDENTU1:
12+ 12+
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Primjer:
Zadatak je stvoriti proceduru za unos podataka u tablicu STUDENT, uz
poseban mehanizam automatskog generiranja matinog broja.
Princip automatskog generiranja podrazumijeva format x-gggg,
gdje je gggg oznaka godine u kojoj se student upisuje,
a x je njegov redni broj u toj godini.
Dakle student koji se prvi upisuje u 2005. godini imat e matini broj
1-2002 itd.
Zadana je tablica STUDENT:
2+.10.200/
63
125 125
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Gore navedena procedura vraa podatak o matinom broju za svaki novi
podatak koji se unosi.
Prije upisivanja podataka
za matine brojeve u
tablicu STUDENT
procedura vraa:
126 126
Primjer: Postojea procedura je
iskoritena za formiranje nove
procedure kojom se obavlja unos
novog studenta (novi red u tablici
STUDENT.
2+.10.200/
6+
12/ 12/
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Za izvrenje procedure mogu se koristiti slijedee instrukcije:
128 128
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Primjer: Zadane su tablice prema relacijskoj shemi:
Treba napraviti proceduru PROC_UPISNI koja prima slijedee ulazne
parametre: matini broj studenta (MATBR), naziv obrazovnog programa
(OBR_PROG_IME), semestar i kolsku godinu,
te temeljem tih podataka vri unos u tablicu UPISNI_LIST.
2+.10.200/
65
129 129
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
130 130
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Stored Procedures Stored Procedures Stored Procedures
Za izvrenje procedure mogu se koristiti instrukcije:
2+.10.200/
66
131 131
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SP SP SP --- rukovanje greskama rukovanje greskama rukovanje greskama
RUKOVANJE GREKAMA
Tijekom izvravanja niza SQL instrukcija ili SQL procedure
mogue je da u bilo kojoj SQL instrukciji nastupi greka
tijekom njezina izvravanja.
Za detekciju greke u izvravanju pojedinog SQL izraza
koristi se sistemska (globalna) varijabla @@ERROR.
Vrijednost ove varijable postavlja sam sustav u zavisnosti
od toga da li SQL instrukcija obavljena ispravno ili ne.
Ako je SQL instrukcija ispravno obavljena, nakon izvrenja
te instrukcije vrijednost @@ERROR je 0.
Ako nastupi pogreka, varijabla @@ERROR sadrava
brojani podatak (integer), koji predstavlja kod pogreke.
Svaki tip pogreke ima svoj jedinstveni kod, temeljem kojeg
je mogue prepoznati o kojoj se vrsti pogreke radi.
132 132
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SP SP SP --- rukovanje greskama rukovanje greskama rukovanje greskama
Pri obradi niza SQL instrukcija treba ispitati valjanost
izvrsenja SOL instrukcije.
Nakon svake instrukcije u kojoj moe nastati greka koja
utjee na rezultate obrade treba obraditi i potencijalnu
greku.
Ukoliko je vrijednost globalne varijable @@ERROR <>0,
potrebno je definirati instrukcije, koje e se izvriti i sprijeiti
- mogunost pogrenih akcija u bazi podataka
- mogunost pucanja procedure ili aplikacije koja ju koristi.
Primjeri ispitivanja pogreki dani su u proceduri za unos
novog studenta i u proceduri za unos novog upisnog lista.
Uz sistemsko rukovanje grekama, na formiranje pogreke
moe utjecati i sam korisnik.
Pogledajmo ovo na primjeru procedure PROC_STUDENT.
2+.10.200/
6/
133 133
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SP SP SP --- rukovanje greskama rukovanje greskama rukovanje greskama
13+ 13+
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SP SP SP --- rukovanje greskama rukovanje greskama rukovanje greskama
2+.10.200/
68
135 135
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SP SP SP --- rukovanje greskama rukovanje greskama rukovanje greskama
136 136
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SP SP SP --- rukovanje greskama rukovanje greskama rukovanje greskama
2+.10.200/
69
13/ 13/
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SP SP SP --- rukovanje greskama rukovanje greskama rukovanje greskama
Prilikom izvrenja procedure PROC_STUDENT, potrebno je ispitati
povratno stanje procedure. Negativni cijeli broj kao povratno stanje
procedure znai da je u proceduri nastupila greka.
Meutim pitanje je gdje je nastupila greka.
Neke pogreke generiraju poruku o tipu i uzroku pogreke, tako da
je mogue locirati pogreku.
U drugim sluajevima kada nije mogue locirati gdje je nastala
greka, SQL nudi mogunost korisniki oblikovanih poruka o
grekama, tj. korisniku je dana mogunost da uz sistemski
definirane pogreke definira vlastite greke.
138 138
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SP SP SP --- rukovanje greskama rukovanje greskama rukovanje greskama
Svaka pogreka u sustavu ima nekoliko obiljeja:
a) jedinstveni kod pogreke
b) tekst pogreke
c) nivo pogreke
d) stanje pogreke.
a) jedinstveni kod pogreke cijeli broj koji jedinstveno
opisuje pogreku.
b) tekst pogreke tekst koji opisuje pogreku i prikazuje
se prilikom nastupanja pogreke.
Definiran je u obliku formata za ispis koji se koristi
u viim programskim jezicima.
2+.10.200/
/0
139 139
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SP SP SP --- rukovanje greskama rukovanje greskama rukovanje greskama
c) nivo pogreke (severity level) cijeli broj koji definira nivo
(klasu) pogreke. Uobiajeno se odreuje na temelju
klasa koje su sistemski definirane.
Svaki SQL sustav ime definirani odreeni broj nivoa
(klasa) za odreene tipove pogreki.
Npr. SQL server ima definirane slijedee nivoe
pogreki:
1- sistemske informacije (obuhvaa poruke koje
nastupaju uslijed sistemskih poruka)
7 statusne informacije poruke o pojedinim stanjima
posluitelja
13 - Transakcijske pogreke
14 poruke vezane za autorizaciju pristupa
15 SQL sintaksne poruke
16 Korisnike poruke
17 poruke nedostupnosti resursa
itd.
1+0 1+0
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SP SP SP --- rukovanje greskama rukovanje greskama rukovanje greskama
d) stanje pogreke kojim se identificira izvor pogreke,
ukoliko odreeni tip pogreke moe nastupiti iz
vie izvora
Primjer definiranja pogreke:
Kod Tekst Nivo
40000 Operacija nije izvrena! Nismo dobili
ID za novi red u tablici
16
Nakon to je korisnika pogreka definirana, mogue je generiranje
pogreke primjenom instrukcije RAISERROR, za koju vrijedi sintaksa:
RAISERROR(kod | poruka, nivo, stanje, argumenti),
gdje kod i nivo moraju odgovarati onima koji su navedeni u definiciji
pogreke.
Argumenti predstavljaju parametre koji postaju sastavni dio teksta
poruke (greke), na mjestima u tekstu gdje su argumenti definirani.
2+.10.200/
/1
1+1 1+1
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 SP SP SP --- rukovanje greskama rukovanje greskama rukovanje greskama
Dakle uz definiranu korisniku greku kao u zadanom
primjeru, u sluaju procedure PROC_STUDENT mogua je
primjena u obliku:
SELECT @lStudent_id=@@IDENTITY
IF @lStudent_id IS NULL
BEGIN
ROLLBACK TRAN
RAISERROR(40000,16,1, 'STUDENT')
RETURN -6
END
U sluaju neispravnog generiranja nove vrijednosti za
STUDENT_ID, pojavit e se poruka:
''Operacija nije izvrena! Nismo dobili ID za novi red u
tablici STUDENT''.
1+2 1+2
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Trigeri Trigeri Trigeri
OKIDAI (TRIGGERS)
Okidai (trigeri) predstavljaju posebno klasu SQL procedura
koja se izvrava automatski kod izvravanja akcijskih upita
(UPDATE, INSERT, DELETE) na pojedinim tablicama u bazi.
Trigeri se uglavnom koriste kao oblik proirenja provjere
integriteta i suvislosti podataka prema logici procesa kojeg
opisuje baza.
2+.10.200/
/2
1+3 1+3
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Trigeri Trigeri Trigeri
Okidai su uvijek vezani uz tablice, pri emu jedna tablica
moe imati vie okidaa.
Mogue je definirati posebne okidae za svaki tip promjene
koja se vri u tablici (unos, promjena ili brisanje podataka), ili
zajednike okidae za razliite promjene.
Okidai sadravaju SQL instrukcije u obliku slinom kao i
SQL procedure.
Okidai se izvravaju odmah nakon to zavri instrukcija koja
ih okida.
Okidae nije mogue vezati uz poglede ili sistemske tablice u
bazi podataka.
1++ 1++
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Trigeri Trigeri Trigeri
2+.10.200/
/3
1+5 1+5
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Trigeri Trigeri Trigeri
Primjenom okidaa zabranjuju se ili ponitavaju (rollback)
promjene kojima se kri integritet podataka.
Okidai omoguavaju uvoenje stroih i sloenijih
ogranienja od onih koja se definiraju preko CHECK
ogranienja.
Za razliku od CHECK ogranienja koje djeluje samo na
nivou definirane tablice, okida moe pristupiti drugim
tablicama, te provjeravati sloenije uvjete integriteta.
Pomou okidaa mogue je ustanoviti razliku izmeu stanja
tablice prije promjena i nakon promjena i poduzeti
odgovarajue akcije u vezi tih promjena.
1+6 1+6
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Trigeri Trigeri Trigeri
Princip rada
Nakon nastupanja promjena u odreenoj tablici (zbog
unosa, brisanja ili promjene podataka), interni mehanizam
baze podataka stvara dvije privremene tablice naziva
deleted i inserted.
Tablica deleted pohranjuje kopije svih redova na koje djeluju
instrukcije DELETE ili UPDATE.
Primjenom instrukcije DELETE odreeni redovi se briu iz
izvorne tablice i prebacuju u privremenu tablicu naziva
deleted.
2+.10.200/
/+
1+/ 1+/
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Trigeri Trigeri Trigeri
Princip rada
Tablica inserted pohranjuje kopije svih novouneenih
redova u promatranu tablicu.
To znai da se djelovanjem instrukcije INSERT novi redovi
dodaju istovremeno u tablicu u bazi i sistemsku privremenu
tablicu inserted.
Nakon unosa podataka instrukcijom INSERT redovi u tablici
inserted predstavljaju kopiju novounesenih redova u
osnovnoj tablici.
Operacije auriranja (UPDATE) tretiraju se kao slijed
brisanja i unosa; podaci prije promjene prenose se u
privremenu tablicu deleted, a novopromijenjeni podaci u
inserted tablicu.
1+8 1+8
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Trigeri Trigeri Trigeri
Prilikom formiranja okidaa potrebno je definirati
- ime(naziv) okidaa
- tablicu uz koju je okida vezan
- akciju koja aktivira okida
- niz SQL instrukcija koje se izvravaju aktiviranjem okidaa.
CREATE TRIGGER naziv_okidaa
ON ime_tablice
FOR [DELETE] [,] [INSERT] [,] [UPDATE]
AS
sql_izrazi [1...n]
|
FOR [INSERT] [,] [UPDATE]
AS
IF UPDATE (naziv_kolone) [AND | OR UPDATE (naziv_kolone)]
sql_izrazi [ ...n]
2+.10.200/
/5
1+9 1+9
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Trigeri Trigeri Trigeri
naziv_okidaa ime okidaa.
Mora zadovoljavati pravilo imenovanja objekata u bazi i biti
jedinstveno u bazi.
ime_tablice predstavlja naziv tablice za koju se vezuje
okida.
Ne moe se navesti naziv pogleda, budui okidae nije
mogue vezati uz poglede.
[DELETE] [,] [INSERT] [,] [UPDATE] | [INSERT] [,]
[UPDATE] - predstavljaju kljune rijei kojima se odreuje tip
akcije, koji svojim izvrenjem aktivira okida.
Potrebno je navesti bar jednu opciju.
Ukoliko se isti okida definira za vie razliitih akcija navode
se u obliku liste odvojene zarezom, pri emu nije bitan
redoslijed navoenja.
150 150
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Trigeri Trigeri Trigeri
IF UPDATE (naziv_kolone) - izraz kojim se provjerava akcija
unosa ili auriranja navedene kolone u tablici.
Ova opcija ne primjenjuje se u okidaima koji su vezani za
operaciju brisanja (DELETE).
U izrazu je mogue navesti vei broj kolona.
Prilikom aktiviranja okidaa (trigera), SQL izrazi navedeni u
sklopu okidaa izvravaju se na nain kao i u SQL
procedurama (stored procedures).
Prilikom navoenja SQL instrukcija u sklopu okidaa treba
eliminirati mogunost da okida vraa bilo kakve podatke, jer
bi takvi podaci poremetili akciju koja se vri na tablici. Stoga
se u deklariranju SQL instrukcija u okidau nikad ne koriste
SELECT izrazi koji vraaju rezultat u obliku prikaza.
2+.10.200/
/6
151 151
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Trigeri Trigeri Trigeri
Primjer:
Zadana je tablica STUDENT izrazom:
CREATE TABLE STUDENT
(student_id int IDENTITY CONSTRAINT PK_STUDENT PRIMARY KEY,
ime varchar(20) NOT NULL,
prezime varchar(30) NOT NULL,
jmbg char(13),
ime_oca varchar(20),
dat_roenja smalldatetime NOT NULL,
mjesto_rod int NOT NULL,
CONSTRAINT FK_MJESTO_ROD FOREIGN KEY
REFERENCES mjesto(mjesto_id),
mjesto_stan int NOT NULL,
CONSTRAINT FK_MJESTO_STAN FOREIGN KEY
REFERENCES mjesto(mjesto_id),
adresa varchar(25),
dat_upisa smalldatetime NOT NULL DEFAULT getdate(),
matbr varchar(10) )
152 152
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Trigeri Trigeri Trigeri
Kolona jmbg definirana je bez eksplicitnog navoenja
NULL ili NOT NULL, to podrazumijeva svojstvo NULL.
Ovakvom strukturom tablice mogue je evidentirati
studente bez unosa podatka jmbg.
Uz navedenu strukturu u tablici postoji 1000 redova
(studenata).
Recimo da se zbog promjene pravila u evidentiranju
studenata uvodi pravilo da je pri daljnjem upisu studenata
podatak jmbg obavezan. Dakle za svakog slijedeeg
studenta obavezno je unijeti njegov JMBG.
Problem ne moemo rijeiti jednostavnom promjenom
svojstva kolone JMBG u NOT NULL, budui u tablici ve
imamo veliki broj redova, bez tog podatka.
Stoga je nuna primjena okidaa, koji e djelovati uz
operacije unosa i promjene podataka u tablici STUDENT.
2+.10.200/
//
153 153
RA!SERROR(kod ] poruka, nivo, stanje)
Uz ovako definirani okida, svaki novi unos ili promjena podataka 'okida' okida
i pokree izvravanje instrukcija u okidau.
Svaki novouneseni redak usporedno sa unosom u tablicu STUDENT unosi se i
u sistemsku privremenu tablicu inserted. Za novouneeni red iz tablice
inserted uzimamo vrijednost atributa JMBG te ga pohranjujemo u lokalnu
varijablu @sJMBG.
Ukoliko ne postoji podatak za JMBG
(NULL) takav unos (ili promjena) se
ponitava instrukcijom
ROLLBACK TRAN, a korisniku se
prikazuje poruka generirana izrazom
RAISERROR.
15+ 15+
650 650 650 --- Baze podataka 2 Baze podataka 2 Baze podataka 2 Trigeri Trigeri Trigeri
Pri tome treba istaknuti nain djelovanja instrukcije
ROLLBACK TRANSACTION, kada se ona primijenjuje
unutar okidaa.
- sve promjene podataka koje je izvrila tekua transakcija
se ponitavaju (rollback) ukljuujui i promjene koje
eventualno stvara sam okida.
- okida nastavlja sa normalnim izvravanjem svih
preostalih instrukcija nakon ROLLBACK izraza. Ako neka
od instrukcija koje slijede u okidau vri promjene na
podacima te promjene se normalno izvravaju.
- slijed SQL instrukcija ili procedura koja sadri instrukciju
koja je okinula okida odmah se prekida i preostale
instrukcije koje slijede se ne izvravaju.
2+.10.200/
/8
155 155
Okida djeluje na nain da svaku izvrnu instrukciju koja ga pokree
podrazumijeva kao dio transakcije.
Pri tome je mogue da instrukcija za npr. unos podataka bude navedena
kao jedna od instrukcija u sklopu transakcije:
Na poetku transakcije je niz instrukcija.
Nakon toga se izvri instrukcija INSERT, koja 'okida' okida vezan za
operaciju unosa, te poinje izvravanje SQL instrukcija sadranih u okidau.
Ukoliko se u sklopu okidaa izvri ROLLBACK TRAN, tekua transakcija
zavrava sa ROLLBACK-om i sve to je do tada u transakciji obavljeno
ponitava se.
Ukoliko u okidau nije aktiviran ROLLBACK, kontrola toka se vraa u
izvornu transakciju i nastavlja se izvravanje od izraza koji slijedi nakon
instrukcije INSERT.
Transakcija sada zavrava sa ROLLBACK ili COMMIT prema daljnjem
slijedu instrukcija u nizu.
156 156
Primjer:
Zadana je slijedea
struktura baze podataka
o studentima:
Treba realizirati potrebne
okidace za tablicu
UPISNI_LIST kojima se
prosiruju pravila
integriteta podataka za
slijedece situacije:
Prilikom unosa i promjene upisnog lista, nije moguce unijeti semestar
koji ne postoji za zadani obrazovni program.
Prilikom unosa i promjene upisnog lista treba osigurati logicki slijed
unosa po semestrima, npr. nije moguce unijeti treci semestar ako ne
postoji drugi.
Osigurati suvislost podatka za skolsku godinu na nacin da nije moguce
unijeti skolsku godinu nizu od one u kojoj je student upisan na fakultet.
Nije moguce ukloniti upisni list vezan za odredeni semestar, ako vec
postoje visi semestri od onog koji se zeli izbrisati.
2+.10.200/
/9
15/ 15/
Triger za insert podataka:
158 158
Nastavak trigera.
Prilikom unosa i promjene upisnog lista treba osigurati
logicki slijed unosa po semestrima, npr. nije moguce
unijeti treci semestar ako ne postoji drugi.
Prilikom unosa i promjene upisnog lista, nije
moguce unijeti semestar koji ne postoji za
zadani obrazovni program.
Nije moguce unijeti skolsku godinu nizu od
one u kojoj je student upisan na fakultet.
2+.10.200/
80
159 159
Triger za delete podataka: Nije moguce ukloniti upisni list vezan za
odredeni semestar, ako vec postoje visi
semestri od onog koji se zeli izbrisati.

Вам также может понравиться