Documente Academic
Documente Profesional
Documente Cultură
Un bloc pl/sql are 3 componente: zona declarativa, zona executabila si zona de exceptii:
[DECLARE]
variabile,cursori,exceptii
BEGIN
comenzi SQL
structuri de programare
[EXCEPTION]
actiuni ce se executa cind apare o exceptie,eroare
END;
Exemplu:
DECLARE
v_variabila VARCHAR2(5);
BEGIN
SELECT coloana INTO variabila FROM tabela;
EXCEPTION
WHEN exceptie THEN actiune;
END;
/
1. Blocuri anonime
Sunt blocuri fara nume si sunt declarate la puncul in aplicatie unde sunt executate:
1
BEGIN
-------
EXCEPTION
-------
END;
/
Exemplu:
DECLARE
v_sal constant real:=50000;
g_codp varchar2(5) not null:='111';
v_data date;
g_datai date default to_date ('15-SEP-05','DD-MON-YY');
g_codsef number(2) default 2;
v_pretnou rindcom.pret%type;
BEGIN
v_data:=to_date ('15-SEP-05','DD-MON-YY');
SELECT data INTO v_data FROM comenzi where nrcom=100;
SELECT max(pret)*1.1 INTO v_pretnou FROM rindcom WHERE
trim(codprodus)=g_codp;
END;
/
Blocurile anonime se pot imbrica. Se utilizeaza etichete pentru a delimita fiecare bloc:
<<eticheta bloc1>>
BEGIN
------
<<eticheta bloc2>>
DECLARE
-------
BEGIN
-------
END bloc2;
END bloc1;
2. Subprograme
Sunt blocuri pl/sql care au nume si pot fi proceduri sau functii.
Ele se pot stoca la nivel de Oracle server (proceduri/functii stocate) sau de aplicatie
(Developer Suite). Subprogramele se pot grupa in pachete.
2
--exceptii
END [nume_procedura];
/
3
3.Triggeri
Exemple:
1. Să se calculeze media a două numere. Numerele se vor introduce de la tastatură.
4
Set serveroutput on
accept p_sal prompt 'Introduceti salariul:'
accept p_procent prompt 'Introduceti procentul:'
declare
v_sal number:=&p_sal;
v_procent number:=&p_procent;
begin
dbms_output.put_line(to_char(nvl(v_sal,0)*(1+nvl(v_procent,0)/100)));
end;
/
set serveroutput on
accept p_nrcom prompt 'Introduceti nr comanda:'
declare
v_data comenzi.data%type;
v_termenliv rindcom.termenliv%type;
v_nrcom comenzi.nrcom%type;
begin select c.nrcom, c.data, max(rc.termenliv) into v_nrcom, v_data, v_termenliv from
comenzi c, rindcom rc where c.nrcom=rc.nrcom and c.nrcom=&p_nrcom group by
c.nrcom, c.data;
dbms_output.put_line ('Comanda '|| v_nrcom||' s-a incheiat la: '|| v_data||' si are termen
de livrare '|| v_termenliv);
end;
/