Download - Lekcija 1. Uvod u PLSQL
2002 Prentice Hall. All rights reserved.
1
Pregled1 Programski blokovi2 Struktura blokova 3 Procedure 4 Funkcije 5 Upravaljanje procedurama i funkcijama
Uvod u PL/SQL programiranje
2002 Prentice Hall. All rights reserved.
2
1 Uvod
• Ciljevi – Kreiranje, izvršavanje procedura, funkcija, trigera
– Upotreba potprograma i trigera u aplikacijama
– Upoznavanje sa nekim osnovnim ugrađenim paketima
– Manipulacija velikim objektima
2002 Prentice Hall. All rights reserved.
3
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 treće generacije– Stotine proceduralnih linija koda su potrebnr da bi
zamijenile jednu SELECT naredbu– Zbog toga ovaj jezik doživljava veliku popularnost– S druge strane, izražajni kapaciteti ovog jezika su ograničeni– Neka ograničenje je teško, pa i nemoguće, definisati putem
SQL mehanizma(poslije prodaje artikla, uvećaj saldo za cijenu i smanji broj artikala u skladištu za jedan, samo artiklima skupljim od 100 se može sniziti cijena za 10%)
– Postoji potreba da se SQL na neki način proširi
2002 Prentice Hall. All rights reserved.
4
1 Uvod
• PL/SQL– Jezik blizak SQL, tj. podržava većinu koncepata jezika SQL
za rad sa bazom podataka
– U sebi sadrži koncepte jezika treće generacije, kao što su uslovno izvršavanje(IF), sekvencijalno izvršavanje programa, iterativno izvršavanje(FOR, WHILE.)
– Centralizovano izvršavanje, tj. programe izvršava server baze podataka
– Programi pisani putem PL/SQL jezika čuvaju se na strani servera, a ne kod klijenata. To podrazumijeva lakše održavanje. Promjena se vrši na jednom mjestu i odmah postaje vidljiva svim klijentima.
2002 Prentice Hall. All rights reserved.
5
1 Uvod
• Pojednostavljeni pogled na PL/SQL i Oracle server
2002 Prentice Hall. All rights reserved.
6
1 Uvod
• Prednosti– Programi pisani putem PL/SQL jezika čuvaju se na strani
servera, a ne kod klijenata. To podrazumijeva lakše održavanje. Promjena se vrši na jednom mjestu i odmah postaje vidljiva svim klijentima.
– Da li je bolje koristi “pravi” jezik kao C? C podržava komunikaciju sa Oracle bazom, ali različite biblioteke različitih proizvođača nijesu 100% kompatibilne. Programi iste namjene pisani u PL/SQL su lakši za pisanje i efikasniji.
– PL/SQL čuva varijable u istom formatu kao i server. Kada koristite programski jezik opšte namjene npr. Java, gubi se vrijeme na preformatiranje podataka. Može se desiti da numerički tip podatka server čuva u jednom formatu, a programski jezik u drugom.
2002 Prentice Hall. All rights reserved.
7
1 Uvod
• Prednosti:– PL/SQL se izvršava 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.
2002 Prentice Hall. All rights reserved.
8
1 Uvod
• Nedostaci– Kompanija Oracle je vlasnik, te se on može koristi samo sa
proizvodima te kompanije. Drugi proizovđači ga ne podržavaju
– Malo je alata za rad sa ovim jezikoma, koji komuniciraju direktno sa serverom baze podataka.
– Obično se koristi drugi jezik kao Front-End, koji potom komunicira sa serverom
2002 Prentice Hall. All rights reserved.
9
1 Uvod
• Kako početi:– Instalirati Oracle server baze podataka
– Pristupiti bazi putem neke klijentske aplikacije napr. SQL*Plus.
– Ukoliko koncekcija nije moguća, definisati parametre u fajlu tnsnames.ora
– Moguća je konkecija na udaljene servere, itd.
2002 Prentice Hall.All rights reserved.
Outline10
Struktura PL/SQL bloka
<heade> IS|ASDECLARE //opciono//varijable, kursori i korisnički definisani izuzeci
BEGIN
-SQL naredba-PLSQL naredba
EXCEPTION
END;
2002 Prentice Hall.All rights reserved.
Outline11
Struktura PL/SQL bloka
--Primjer PLSQL bloka
DECLAREv_variable VARCHAR2(5);
BEGINDBMS_OUTPUT.PUT_LINE(‘Hello world’);
EXCEPTIONWHEN exception_name THEN
END;
2002 Prentice Hall. All rights reserved.
12
1 Uvod
• Svaka programska konstrukcija u PL/SQL-u sastoji se od blokova
• Blokovi mogu biti ugnježdeni međusobno• PL/SQL blokovi mogu se izvršavati na
serveru(kao stored procedure, func. itd.), a takođe mogu biti kreirani putem alata kao što su Oracle Forms Developer, Oracle Report Developer, id.
2002 Prentice Hall. All rights reserved.
13
Podjela blokova
2002 Prentice Hall. All rights reserved.
14
Pregled potprograma
Potprogram je imenovani PL/SQL blok kojem se
predaju neki parametri i koji može biti pozvan iz
nekog okruženja
Dijele se na procedure i funkcije– Procedure
•izršavaju neku akciju
– Funkcije
• računaju neku vrijednost
2002 Prentice Hall. All rights reserved.
15
Pregled potprograma
• Upotreba potprograma– Povećava čitljivost koda
– Omogučava lakše odražavanje i ponovnu upotrebu koda
– Programski kod se nalazi na jednom mjestu, pa promjena neke procedure ili funkcije zahtijeva samo jednu izmjenu
– Povećava se sigurnost jer je moguće definisati koji korisnik smije da izvršava određeni blok naredbi
– Takođe, putem potprograma je moguće kontrolisati pristup podacima
2002 Prentice Hall. All rights reserved.
16
Pregled potprograma
• Zaglavlje imenovanih PL/SQL blokova u sebi nosi informaciju o:– Tipu potprograma
– Imenu
– Načinu poziva
– Listi parametra, ako je ima
– Povratnom tipu, ako se radi o funkciji
2002 Prentice Hall. All rights reserved.
17
Deklaracija varijabli
• Vrši se u DECLARE sekciji• Osnovi tipovi podataka
– VARCHAR2 (maximum_length)
– NUMBER [(precision, scale)]
– DATE
– CHAR [(maximum_length)]
– LONG
– LONG RAW
– BOOLEAN
– BINARY_INTEGER
– PLS_INTEGER
2002 Prentice Hall. All rights reserved.
18
Deklaracija varijabli
• Može se vršiti i putem TYPE kvalifikatova– Primjer
...v_ime zaposleni.ime%TYPE...
•Tip podatka za varijablu v_ime je onaj tip podataka koji odgovara koloni ime u tabeli zaposleni
2002 Prentice Hall. All rights reserved.
19
PL/SQL Naredbe
• PL/SQL naredba može biti – Poziv ugrađene ili korisnički definisane funkcije ili
procedure
– IF blok
– WHILE blok
– FOR blok
– ....
2002 Prentice Hall. All rights reserved.
20
PL/SQL Naredbe
• Postoji veliki broj ugrađenih funkcija– Primjer
v_mailing_address := v_name||CHR(10) ||v_address||CHR(10)||v_state|| CHR(10)||v_zip;
•Konverzija imena zaposlenog u mala slova
v_ename:= LOWER(v_ename);
2002 Prentice Hall. All rights reserved.
21
PL/SQL Naredbe
• Funkcije za konverziju:– TO_CHAR(vrijednost, format)
– TO_DATE (vrijednost,format)
– TO_NUMBER (vrijednost, format)
2002 Prentice Hall.All rights reserved.
Outline22
PL/SQL Naredbe
--Primjer upotrebe funkcije za -konverziju
DECLAREv_datum VARCHAR2(15);
BEGINSELECT TO_CHAR(datum_zaposlenja, 'MON. DD, YYYY')INTO v_datumFROM zaposleniWHERE zid = 7839;
END;
2002 Prentice Hall. All rights reserved.
23
PL/SQL Naredbe
• Varijabla v_datum je deklarisana kao DATE, pa ova naredba dovodi do greške
v_datum := 'January 13, 1998';
•Treba koristiti funkciju za konverziju TO_DATE()
v_datum := TO_DATE('January 13, 1998', 'Month DD, YYYY');
2002 Prentice Hall. All rights reserved.
24
PL/SQL Naredbe
• Strukutura select naredbe
SELECT select_list
INTO{variable_name[, variable_name]...| record_name}
FROM table
WHERE condition;
2002 Prentice Hall.All rights reserved.
Outline25
PL/SQL Naredbe
--Primjer upotrebe SELECT naredbe
DECLARE
v_oid NUMBER(2);v_ime VARCHAR2(15);BEGINSELECT oid, imeINTO v_oid, v_imeFROM odjeljenjeWHERE oid = 1;
...END;
2002 Prentice Hall.All rights reserved.
Outline26
PL/SQL Naredbe
--Primjer select naredbe
DECLARE
v_suma_plata zaposleni.plata%TYPE;v_oid NUMBER NOT NULL := 10;BEGINSELECT sum(plata)INTO v_suma_plataFROM zaposleniWHERE oid = v_oid;
...END;
2002 Prentice Hall. All rights reserved.
27
PL/SQL Naredbe
• Strukutura IF naredbe
IF logicki_uslov THEN
lista_naredbi;
[ELSIF logicki_uslov THEN
lista_naredbi;]
[ELSIF logicki_uslov THEN
lista_naredbi;]
…
2002 Prentice Hall.All rights reserved.
Outline28
PL/SQL Naredbe
--Primjer if naredbe
IF v_ime = 'tehnika' THEN v_id := 10;
END_IF;
2002 Prentice Hall.All rights reserved.
Outline29
PL/SQL Naredbe
--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 THENv_iznos := v_iznos * 4;
END_IF;
2002 Prentice Hall. All rights reserved.
30
PL/SQL Naredbe
• Opsta struktura petlji
LOOP
lista_naredbi;
EXIT [WHEN uslov];
END LOOP
2002 Prentice Hall. All rights reserved.
31
PL/SQL Naredbe
• For i WHILE sintaksa
FOR broja in [REVERSE] donja..gornja LOOP
lista_naredbi;
END LOOP;
WHILE uslov LOOP
lista_naredbi;
END LOOP;
2002 Prentice Hall.All rights reserved.
Outline32
PL/SQL Naredbe
--Primjer FOR naredbe
BEGINFOR brojac in 3..9 LOOP
DBMS_OUTPUT.put_line('i: ' || brojac);END LOOP;
END;
2002 Prentice Hall.All rights reserved.
Outline33
PL/SQL Naredbe
--Primjer while naredbe
brojac NUMBER :=3;
BEGINWHILE brojac < 10 LOOP
DBMS_OUTPUT.put_line('i: ' || brojac);brojac:=brojac +1;
END LOOP;END;
2002 Prentice Hall.All rights reserved.
Outline34
PL/SQL Naredbe
--Primjer ugnježdenih petlji
o_counter NUMBER := 1;i_counter NUMBER := 1;BEGIN
<<outer_loop>>LOOP
EXIT WHEN o_counter > 2;o_counter := o_counter + 1;<<inner_loop>>LOOP
EXIT WHEN i_counter > 3;EXIT outer_loop WHEN i_counter > 2;i_counter := i_counter + 1;DBMS_OUTPUT.put_line('i: ' || i_counter
|| ' j: ' || o_counter);END LOOP inner_loop;
END LOOP outer_loop;END;
i: 2 j: 2
i: 3 j: 2
2002 Prentice Hall. All rights reserved.
35
Upotreba promjenljivih tipa zapisa
• Sintaksa:
TYPE ime_tipa IS RECORD
(deklaracija_polja (, deklaracija_polja)*);
ime_varijable tip;
•Gdje je deklaracija_polja
ime_polja (tip_podatka | tabela.kolona%TYPE)
2002 Prentice Hall.All rights reserved.
Outline36
PL/SQL Naredbe
--Primjer deklaracije zapisa
TYPE odjeljenje_rec_type1 IS RECORD(o_id NUMBER, naziv varchar2(20));odjeljenje_rec1 odjeljenje_rec_type;
TYPE odjeljenje_rec_type2 IS RECORD(o_id odjeljenje.o_id%TYPE, naziv varchar2(20));
2002 Prentice Hall. All rights reserved.
37
Upotreba promjenljivih tipa zapisa
• Jednostavniji način deklaracije varijable tipa zapisa:
odjeljenje_rec odjeljenje%ROWTYPE;
2002 Prentice Hall.All rights reserved.
Outline38
PL/SQL Naredbe
--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;
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
Eksplicitni kursori
•Manipulacija eksplicitnim kursorima
2002 Prentice Hall. All rights reserved.
40
Eksplicitni kursori
•Čitanje podataka putem kursora
2002 Prentice Hall. All rights reserved.
41
Eksplicitni kursori
• Deklaracija kursora
CURSOR ime IS
SELECT naredba
•Ne upotrebljava se ključna riječ into
2002 Prentice Hall.All rights reserved.
Outline42
PL/SQL Naredbe
--Upotreba kursora
CURSOR zap_cursor ISSELECT * FROM zaposleni;
2002 Prentice Hall. All rights reserved.
43
Rad sa kursorom
• Otvaranje
OPEN ime_kursora
• Pristupanje zapisima u kursoru
FETCH ime_kursora INTO var,var...| zapis
• Zatvaranje kursora
CLOSE ime_kursora
2002 Prentice Hall. All rights reserved.
44
Ekplicitni kursori
• Putem atributa kursora moze se doći do informacija li je kursor prazan itd.
• %ISOPEN– Vraća TRUE ako je kursor otvoren
• %NOTFOUND – Vraća TRUE ako posljednji FETCH nije vratio podatke
• %FOUND– Vraća TRUE ako posljednji FETCH je vratio podatke
• %ROWCOUNT – Vraća broj torki koje su učitane do sada
2002 Prentice Hall.All rights reserved.
Outline45
PL/SQL Naredbe
--Upotreba ekplicitnih kursora
CURSOR zap_cursor ISSELECT * FROM zaposleni;zap_rec zaposleni%ROWTYPE;
BEGIN
IF zap_cursor%ISOPEN THENdbms_output.put_line('Kursor je otvoren ');
ELSEdbms_output.put_line('Kursor je zatvoren ');
END IF;
OPEN zap_cursor;
IF zap_cursor%ISOPEN THENdbms_output.put_line('Kursor je otvoren ');
ELSEdbms_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
Kursor i FOR naredba
• Sintaksa
FOR ime_zapisa IN ime_kursora
statement_list;
END LOOP;
2002 Prentice Hall.All rights reserved.
Outline47
PL/SQL Naredbe
--Upotreba ekplicitnih kursora
CREATE OR REPLACE PROCEDURE StampajZaposlene2
IS
CURSOR zap_cursor ISSELECT * FROM zaposleni;
BEGIN
FOR zap_rec IN zap_cursor LOOPdbms_output.put_line('Zaposleni' ||
zap_cursor%ROWCOUNT || '.' || zap_rec.ime || ' ' || zap_rec.jmbg);END LOOP;
END;/
2002 Prentice Hall.All rights reserved.
Outline48
PL/SQL Naredbe
--Upotreba ekplicitnih kursora
temp NUMBER DEFAULT 1;BEGIN
FOR zap_rec IN (SELECT * FROM zaposleni) LOOPdbms_output.put_line('Zaposleni ' || temp
|| '.' || zap_rec.ime || ' ' || zap_rec.jmbg);temp := temp + 1;
END LOOP;
END;/
2002 Prentice Hall. All rights reserved.
49
Kursori sa parametrima
• Moguće je definisati i parametrizovane kursore• Sintaksa
CURSOR ime
(ime parametra tip_parametra, ...) IS
SELECT naredba
2002 Prentice Hall.All rights reserved.
Outline50
PL/SQL Naredbe
--Upotreba ekplicitnih kursora
CURSOR zap_cursor(v_oid NUMBER) ISSELECT * FROM zaposleni where o_id = v_oid;zap_rec zaposleni%ROWTYPE;
BEGIN
OPEN zap_cursor(&v_id); 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.
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 definiše vrijednost koja će biti predata proceduri pri njenog izvršavanja
• Postoje tri modela predaje parametara proceduri– IN
– OUT
– INOUT
2002 Prentice Hall. All rights reserved.
53
Modeli predaje parametara prilikom poziva procedure
• IN parametri– Ovo je podrazumijevani model predaje parametara
– Predstavljaju vrijednost koja je predata proceduri
– Nije ih moguće mijenjati u okviru tijela procedure
– Ponaša se kao konstanta
– Pri pozivu moguće je predati litaral, izraz, konstantu ili inicijalizovanu varijablu
2002 Prentice Hall. All rights reserved.
54
Modeli predaje parametara prilikom poziva procedure
• OUT parametri – Moraju biti inicijalizovani
– Služe za vraćanje informacija okruženju koje je pozvalo proceduru
– Mora se predati varijabli i nije bitno da li je inicijalizovana ili ne
• IN OUT parametri – Moraju biti specificirani
– Predaju se programu ali se i vraću vrijednost okruženju koje je pozvalo proceduru
– Mora se predati varijabla i ona mora biti inicijalizovana
2002 Prentice Hall.All rights reserved.
Outline55
PL/SQL Naredbe
--Procedura koja uvećava platu zaposlenim
create or replace procedure uvecaj_platu(p_id in zaposleni.z_id%TYPE)as beginupdate zaposleni set plata = plata + 0.1 * plata
where z_id = p_id;end uvecaj_platu;/
2002 Prentice Hall.All rights reserved.
Outline56
PL/SQL Naredbe
--za zadato p_oid vraca naziv odjeljenja u promjenljivu p_ime
create or replace procedure ime_odjeljenja(p_oid in odjeljenje.o_id%TYPE, p_ime OUT odjeljenje.naziv%TYPE)
as beginselect naziv into p_ime from odjeljenjewhere o_id = p_oid;
end;/
2002 Prentice Hall.All rights reserved.
Outline57
PL/SQL Naredbe
--Procedura koja vrsi formatiranje datuma
create or replace procedure formatiraj_datum(p_datum IN OUT varchar2)as
beginp_datum := SUBSTR(p_datum, 1, 2) || '-' ||
SUBSTR(p_datum, 4, 2) || '-' || SUBSTR(p_datum, 7, 4);
end;/
2002 Prentice Hall. All rights reserved.
58
Procedure
• Moguće je vršiti proizvoljno ugnježdavanje procedura, tj. moguće je pozvati jednu proceduru iz tijela druge.
2002 Prentice Hall.All rights reserved.
Outline59
PL/SQL Naredbe
--Procedura koja uvećava platu zaposlenim
CREATE OR REPLACE PROCEDURE uvecaj_platu_svima(p_oid IN odjeljenje.o_id%TYPE)AS
CURSOR zap_cursor (c_oid NUMBER)IS(SELECT * FROM zaposleni WHERE o_id=c_oid);
zap_rec zaposleni%ROWTYPE;BEGINOPEN zap_cursor(p_oid); LOOP
FETCH zap_cursor INTO zap_rec;EXIT WHEN zap_cursor%NOTFOUND;uvecaj_platu(zap_rec.z_id);
END LOOP;COMMIT:
END;/
2002 Prentice Hall. All rights reserved.
60
Kreiranje sekvence
• Primjer:
CREATE SEQUENCE odj_seq;
•Inkrementiranje vrijednosit sekvence
SELECT odj_seq.NEXTVAL FROM SYS.DUAL
2002 Prentice Hall.All rights reserved.
Outline61
PL/SQL Naredbe
--Procedura za unos novog odjeljenja
create or replace procedure unesi_odjeljenje(p_oid in odjeljenje.naziv%TYPE)as begininsert into odjeljenje values(odj_seq.nextval, p_oid);
end;/
2002 Prentice Hall. All rights reserved.
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 definišu i predaju isto kao kod procedura
• Razlika je u tome što funkcija vraća vrijednost
2002 Prentice Hall.All rights reserved.
Outline64
PL/SQL Naredbe
--Funkcija koja vraća prosječnu platu
create or replace function prosjecna_plata(p_oid in odjeljenje.o_id%TYPE) return numberis prosjek number;begin
select avg(plata) into prosjek from zaposleniwhere o_id = p_oid;
return prosjek;end;/
2002 Prentice Hall. All rights reserved.
65
Funkcije
• Ograničenja poziva funkcija koje su dio neke SQL naredbe– Funckija mora da uzima na IN parametre
– Mora da bude stored
– Uzima samo validne SQL tipove podataka, ne PLSQL
– Vraća samo validne SQL tipove podataka
– Ne smije da sadrži DML rečenice
– Funkcije pozvane iz UPDATE/DELETE naredbe nad tabelom T ne smiju da sadrže DML rečenice nad tabelom T
– Ne smiju da sadrže naredbe koje završavaju transakciju
2002 Prentice Hall. All rights reserved.
66
Upravljanje potprogramima
• Dodjeljivanje privilegija
CREATE (ANY) PROCEDURE
ALTER (ANY) PROCEDURE
DROP (ANY) PROCEDURE
EXECUTE (ANY) PROCEDURE
GRANT EXECUTE ON uvecaj_platu TO STUDENT
•Primjer
2002 Prentice Hall. All rights reserved.
67
Upravljanje potprogramima
• Spisak funkcija i procedura, itd. nalazi se u meta-tabeli koja se naziva USER_OBJECTS– OBJECT NAME
• Ime objekta
– OBJECT_ID• Interni identifikator objekta
– OBJECT_TYPE • Tip objekta, npr. TABLE, PROCEDURE itd.
2002 Prentice Hall. All rights reserved.
68
Upravljanje potprogramima
• Izlistavanje svih procedura i funkcija
SELECT object_name,object_type FROM user_objects
WHERE object_type IN ('PROCEDURE','FUNCTION');
2002 Prentice Hall. All rights reserved.
69
Upravljanje potprogramima
• Izvorni kod procedura i funkcija čuva se u meta-tabeli USER_SOURCE– NAME
• Ime objekta
– TYPE • Tip objekta, npr. FUNCTION
– LINE • Linija
– TEXT
2002 Prentice Hall. All rights reserved.
70
Upravljanje potprogramima
• Dobijanje informacija o izvornom kodu neke procedure
SELECT text FROM user_source
WHERE name = 'uvecaj_platu'
2002 Prentice Hall. All rights reserved.
71
Upravljanje potprogramima
• Greške prilikom kompilacije čuvaju se u tabeli USER_ERRORS– NAME
• Ime objekta
– TYPE• Tip objekta
– SEQUENCE• Redni broj greške
– LINE • Linija na kojoj je došlo do greške
– POSITION • Pozicija u liniji na kojoj je došlo do greške
– TEXT • Tekst poruke greške
2002 Prentice Hall. All rights reserved.
72
Upravljanje potprogramima
• Dobijanje informacija eventualnim greškama
SELECT line, text FROM user_errors
WHERE name = 'uvecaj_platu'
SHOW ERRORS PROCEDURE uvecaj_platu
2002 Prentice Hall. All rights reserved.
73
Upravljanje potprogramima
• Uništavanje procedura i funkcija
DROP PROCEDURE 'uvecaj_platu'
2002 Prentice Hall.All rights reserved.
Outline74
PL/SQL Naredbe
--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;/
>select granted_role from user_role_privs;