Professional Documents
Culture Documents
Lekcija 1. Uvod U PLSQL
Lekcija 1. Uvod U PLSQL
Lekcija 1. Uvod U PLSQL
1 Uvod Ciljevi
Kreiranje, izvravanje procedura, funkcija, trigera Upotreba potprograma i trigera u aplikacijama Upoznavanje sa nekim osnovnim ugraenim paketima Manipulacija velikim objektima
1 Uvod SQL
Deklarativni jezik visokog nivoa apstrakcije Sastoji se od relativno malog broja komandi(INSERT, UPDATE, GRANT, DELETE...) Jednostavan za upotrebu, znatno jednostavniji nego proceduralni jezici tree generacije Stotine proceduralnih linija koda su potrebnr da bi zamijenile jednu SELECT naredbu Zbog toga ovaj jezik doivljava veliku popularnost S druge strane, izraajni kapaciteti ovog jezika su ogranieni Neka ogranienje je teko, pa i nemogue, definisati putem SQL mehanizma(poslije prodaje artikla, uveaj saldo za cijenu i smanji broj artikala u skladitu za jedan, samo artiklima skupljim od 100 se moe sniziti cijena za 10%) Postoji potreba da se SQL na neki nain proiri
2002 Prentice Hall. All rights reserved.
1 Uvod PL/SQL
Jezik blizak SQL, tj. podrava veinu koncepata jezika SQL za rad sa bazom podataka U sebi sadri koncepte jezika tree generacije, kao to su uslovno izvravanje(IF), sekvencijalno izvravanje programa, iterativno izvravanje(FOR, WHILE.) Centralizovano izvravanje, tj. programe izvrava server baze podataka Programi pisani putem PL/SQL jezika uvaju se na strani servera, a ne kod klijenata. To podrazumijeva lake odravanje. Promjena se vri na jednom mjestu i odmah postaje vidljiva svim klijentima.
1 Uvod Prednosti
Programi pisani putem PL/SQL jezika uvaju se na strani servera, a ne kod klijenata. To podrazumijeva lake odravanje. Promjena se vri na jednom mjestu i odmah postaje vidljiva svim klijentima. Da li je bolje koristi pravi jezik kao C? C podrava komunikaciju sa Oracle bazom, ali razliite biblioteke razliitih proizvoaa nijesu 100% kompatibilne. Programi iste namjene pisani u PL/SQL su laki za pisanje i efikasniji. PL/SQL uva varijable u istom formatu kao i server. Kada koristite programski jezik opte namjene npr. Java, gubi se vrijeme na preformatiranje podataka. Moe se desiti da numeriki tip podatka server uva u jednom formatu, a programski jezik u drugom.
2002 Prentice Hall. All rights reserved.
1 Uvod Prednosti:
PL/SQL se izvrava u istom memorijskom protoru kao i server, te se jako malo vremena gubi na komunikaciju. PL/SQL kod je interpretiran, ali od verzije 9i uveden je i native execution. PL/SQL kod se prevodi u C kod, a potom u binarni.
1 Uvod Nedostaci
Kompanija Oracle je vlasnik, te se on moe koristi samo sa proizvodima te kompanije. Drugi proizovai ga ne podravaju Malo je alata za rad sa ovim jezikoma, koji komuniciraju direktno sa serverom baze podataka. Obino se koristi drugi jezik kao Front-End, koji potom komunicira sa serverom
10
<heade> IS|AS DECLARE //opciono //varijable, kursori i korisniki definisani izuzeci BEGIN -SQL naredba -PLSQL naredba
Outline
Struktura PL/SQL bloka
EXCEPTION
END;
11
--Primjer PLSQL bloka DECLARE v_variable VARCHAR2(5); BEGIN DBMS_OUTPUT.PUT_LINE(Hello world); EXCEPTION WHEN exception_name THEN END;
Outline
Struktura PL/SQL bloka
12
1 Uvod Svaka programska konstrukcija u PL/SQL-u sastoji se od blokova Blokovi mogu biti ugnjedeni meusobno PL/SQL blokovi mogu se izvravati na serveru(kao stored procedure, func. itd.), a takoe mogu biti kreirani putem alata kao to su Oracle Forms Developer, Oracle Report Developer, id.
13
Podjela blokova
14
Pregled potprograma
Potprogram je imenovani PL/SQL blok kojem se predaju neki parametri i koji moe biti pozvan iz nekog okruenja Dijele se na procedure i funkcije
Procedure
izravaju neku akciju Funkcije raunaju neku vrijednost
15
16
17
18
Tip podatka za varijablu v_ime je onaj tip podataka koji odgovara koloni ime u tabeli zaposleni
19
20
v_ename:= LOWER(v_ename);
21
22
--Primjer upotrebe funkcije za konverziju DECLARE v_datum VARCHAR2(15); BEGIN SELECT TO_CHAR(datum_zaposlenja, 'MON. DD, YYYY') INTO v_datum FROM zaposleni WHERE zid = 7839; END;
Outline
PL/SQL Naredbe
23
PL/SQL Naredbe Varijabla v_datum je deklarisana kao DATE, pa ova naredba dovodi do greke
v_datum :=
'January 13, 1998';
24
25
--Primjer upotrebe SELECT naredbe DECLARE v_oid NUMBER(2); v_ime VARCHAR2(15); BEGIN SELECT oid, ime INTO v_oid, v_ime FROM odjeljenje WHERE oid = 1; ... END;
Outline
PL/SQL Naredbe
26
--Primjer select naredbe DECLARE v_suma_plata zaposleni.plata%TYPE; v_oid NUMBER NOT NULL := 10; BEGIN SELECT sum(plata) INTO v_suma_plata FROM zaposleni WHERE oid = v_oid; ... END;
Outline
PL/SQL Naredbe
27
IF logicki_uslov THEN lista_naredbi; [ELSIF logicki_uslov THEN lista_naredbi;] [ELSIF logicki_uslov THEN lista_naredbi;]
2002 Prentice Hall. All rights reserved.
28
Outline
PL/SQL Naredbe
29
--Primjer elsif naredbe IF v_start > 200 THEN v_iznos := v_iznos * 2; ELSIF v_start > 300 THEN v_iznos := v_iznos * 3; ELSIF v_start > 400 THEN v_iznos := v_iznos * 4; END_IF;
Outline
PL/SQL Naredbe
30
31
32
Outline
PL/SQL Naredbe
33
Outline
PL/SQL Naredbe
34
Outline
PL/SQL Naredbe
i: 2 j: 2 i: 3 j: 2
2002 Prentice Hall.
All rights reserved.
35
TYPE ime_tipa IS RECORD (deklaracija_polja (, deklaracija_polja)*); ime_varijable tip; Gdje je deklaracija_polja ime_polja (tip_podatka | tabela.kolona%TYPE)
36
Outline
PL/SQL Naredbe
37
Upotreba promjenljivih tipa zapisa Jednostavniji nain deklaracije varijable tipa zapisa:
odjeljenje_rec odjeljenje%ROWTYPE;
38
--Upotreba zapisa
TYPE odjeljenje_rec_type IS RECORD( o_id NUMBER, naziv varchar2(20) ); odjeljenje_rec1 odjeljenje_rec_type; odjeljenje_rec2 odjeljenje%ROWTYPE; BEGIN --Ovo je komentar select * into odjeljenje_rec1 from odjeljenje where o_id = 1; select * into odjeljenje_rec2 from odjeljenje where o_id = 2;
Outline
PL/SQL Naredbe
dbms_output.put_line('ime prvog odjeljenja je :' || odjeljenje_rec1.naziv); dbms_output.put_line('ime drugog odjeljenja je :' || odjeljenje_rec2.naziv); END; /
2002 Prentice Hall.
All rights reserved.
39
40
Eksplicitni kursori
41
42
--Upotreba kursora
CURSOR zap_cursor IS SELECT * FROM zaposleni;
Outline
PL/SQL Naredbe
43
OPEN ime_kursora
Pristupanje zapisima u kursoru FETCH ime_kursora INTO var,var...| zapis Zatvaranje kursora
CLOSE ime_kursora
44
Ekplicitni kursori Putem atributa kursora moze se doi do informacija li je kursor prazan itd. %ISOPEN
Vraa TRUE ako je kursor otvoren
%NOTFOUND
Vraa TRUE ako posljednji FETCH nije vratio podatke
%FOUND
Vraa TRUE ako posljednji FETCH je vratio podatke
%ROWCOUNT
Vraa broj torki koje su uitane do sada
45
Outline
PL/SQL Naredbe
IF zap_cursor%ISOPEN THEN dbms_output.put_line('Kursor je otvoren '); ELSE dbms_output.put_line('Kursor je zatvoren '); END IF; OPEN zap_cursor; LOOP FETCH zap_cursor INTO zap_rec; EXIT WHEN zap_cursor%NOTFOUND; dbms_output.put_line('Zaposleni' || zap_cursor%ROWCOUNT || '.' || zap_rec.ime || ' ' || zap_rec.jmbg); END LOOP; END; / 2002 Prentice Hall.
All rights reserved.
46
47
Outline
PL/SQL Naredbe
48
Outline
PL/SQL Naredbe
END; /
49
Kursori sa parametrima Mogue je definisati i parametrizovane kursore Sintaksa CURSOR ime (ime parametra tip_parametra, ...) IS SELECT naredba
50
Outline
PL/SQL Naredbe
51
Procedure Imenovani PL/SQL blokovi naredbi Sintaksa za kreiranje procedura CREATE [OR REPLACE] PROCEDURE ime_procedure (ime_parametra [par_mod] tip_podatka, ime_parametra [par_mod] tip_podatka, ) IS PL/SQL naredbe END ime_procedure;
2002 Prentice Hall. All rights reserved.
52
Parametri poziva procedure Parametar definie vrijednost koja e biti predata proceduri pri njenog izvravanja Postoje tri modela predaje parametara proceduri
IN OUT INOUT
53
54
IN OUT parametri
Moraju biti specificirani Predaju se programu ali se i vrau vrijednost okruenju koje je pozvalo proceduru Mora se predati varijabla i ona mora biti inicijalizovana
55
Outline
PL/SQL Naredbe
56
Outline
PL/SQL Naredbe
57
Outline
PL/SQL Naredbe
58
Procedure Mogue je vriti proizvoljno ugnjedavanje procedura, tj. mogue je pozvati jednu proceduru iz tijela druge.
59
Outline
PL/SQL Naredbe
60
61
Outline
PL/SQL Naredbe
62
Funkcije Kreiranje funkcija Sintaksa CREATE [OR REPLACE] FUNCTION ime_funkcije (ime_parametra [par_mod] tip_podatka, ime_parametra [par_mod] tip_podatka, ) RETURN tip_podatka IS PL/SQL naredbe END ime_funkcije;
2002 Prentice Hall. All rights reserved.
63
Funkcije Parametri se definiu i predaju isto kao kod procedura Razlika je u tome to funkcija vraa vrijednost
64
Outline
PL/SQL Naredbe
65
66
67
Upravljanje potprogramima Spisak funkcija i procedura, itd. nalazi se u metatabeli koja se naziva USER_OBJECTS
OBJECT NAME
Ime objekta
OBJECT_ID
Interni identifikator objekta
OBJECT_TYPE
Tip objekta, npr. TABLE, PROCEDURE itd.
68
69
TYPE
Tip objekta, npr. FUNCTION
LINE
Linija
TEXT
70
Upravljanje potprogramima Dobijanje informacija o izvornom kodu neke procedure SELECT text FROM user_source WHERE name = 'uvecaj_platu'
71
TYPE
Tip objekta
SEQUENCE
Redni broj greke
LINE
Linija na kojoj je dolo do greke
POSITION
Pozicija u liniji na kojoj je dolo do greke
TEXT
Tekst poruke greke
2002 Prentice Hall. All rights reserved.
72
SELECT line, text FROM user_errors WHERE name = 'uvecaj_platu' SHOW ERRORS PROCEDURE uvecaj_platu
73
74
--Dodjeljivanje privilegija
declare l_plsql_body varchar2(1000) ; begin if '&CONNECT' in ('Y','y') then l_plsql_body := 'grant create view to &USER' execute immediate l_plsql_body; dbms_output.put_line(' Alter session granted '); end if; end; /
Outline
PL/SQL Naredbe