Documente Academic
Documente Profesional
Documente Cultură
Alte exemple de blocuri de proceduri si functii. Utilizarea unor variabile de tip obiect predefinit.
Vom realiza diverse proceduri si functii, deci avem nevoie de activarea afisarii.
SET SERVEROUTPUT ON;
1. CREAREA A TREI TABELE
Crearea tabelelor se regaseste in script.
2. COMPLETAREA CU DATE
Popularea tabelelor cu date se face se realizeaza
in ordinea „parinti” „copii”.
Trebuie respectata ordinea si tipul campurilor.
BEGIN
Pentru a adauga datele mai rapid, instructiunile au fost
incadrate intr-o procedura.
END;
/
3. Crearea si utilizarea comparativa a unei proceduri cu doi parametrii de iesire versus o functie cu un
parametru de iesire.
Interogari pregatitoare
SELECT EXTRACT(MONTH FROM data_cursa) AS luna, SUM(incasari), COUNT(id_cursa)
FROM curse_XY
GROUP BY EXTRACT(MONTH FROM data_cursa);
SELECT EXTRACT(MONTH FROM data_cursa) AS luna, SUM(incasari), COUNT(id_cursa)
FROM curse_XY
GROUP BY EXTRACT(MONTH FROM data_cursa)
HAVING EXTRACT(MONTH FROM data_cursa)=1;
SELECT SUM(incasari), COUNT(id_cursa)
FROM curse_XY
GROUP BY EXTRACT(MONTH FROM data_cursa)
HAVING EXTRACT(MONTH FROM data_cursa)=1;
Preluarea interogarii in functie de unde incercam sa returnam doua valori
CREATE OR REPLACE FUNCTION sit_lun_f1 (p_luna NUMBER) RETURN NUMBER AS
v_tot_inc NUMBER;
v_nrc NUMBER;
BEGIN
SELECT SUM(incasari), COUNT(id_cursa) INTO v_tot_inc,v_nrc
FROM curse_XY
GROUP BY EXTRACT(MONTH FROM data_cursa)
HAVING EXTRACT(MONTH FROM data_cursa)=p_luna;
RETURN v_tot_inc;
RETURN v_nrc;
END;
/
Utilizarea functiei
DECLARE
v_prel_luna NUMBER;
v1 NUMBER;
v2 NUMBER;
BEGIN
v_prel_luna:=&dati_luna;
v1:=sit_lun_f1(v_prel_luna);
v2:=sit_lun_f1(v_prel_luna);
DBMS_OUTPUT.PUT_LINE ('Totalul lunii '||v_prel_luna||' este '||v1||' iar numarul de curse este '||v2);
END;
/
CREATE OR REPLACE FUNCTION sit_lun_f2 (p_luna NUMBER, p_nrc OUT NUMBER) RETURN NUMBER AS
v_tot_inc NUMBER;
BEGIN
SELECT SUM(incasari), COUNT(id_cursa) INTO v_tot_inc,p_nrc
FROM curse_XY
GROUP BY EXTRACT(MONTH FROM data_cursa)
HAVING EXTRACT(MONTH FROM data_cursa)=p_luna;
RETURN v_tot_inc;
END;
/
Utilizarea functiei
DECLARE
v_prel_luna NUMBER;
v1 NUMBER;
v2 NUMBER;
BEGIN
v_prel_luna:=&dati_luna;
v1:=sit_lun_f2(v_prel_luna, v2);
DBMS_OUTPUT.PUT_LINE ('Totalul lunii '||v_prel_luna||' este '||v1||' iar numarul de curse este '||v2);
END;
/
O alta metoda prin care se pot obtine doua sau mai multe valori din apelarea unei functii, este prin definirea unui
nou tip de variabila obiect care sa incapsuleze in campuri distincte aceste valori.
Aceasta functie poate fi utilizata suucesiv, prin apelare dintr-un cursor, pentru a calcula aceste informatii pentru
fiecare luna.
DECLARE
CURSOR c_luna IS
SELECT EXTRACT(MONTH FROM data_cursa) AS luna
FROM curse_XY
GROUP BY EXTRACT(MONTH FROM data_cursa)
ORDER BY 1;
v1_2 OB_INF;
BEGIN
DBMS_OUTPUT.PUT_LINE ('Luna Suma Nr_curse');
DBMS_OUTPUT.PUT_LINE ('------------------------------------');
FOR i IN c_luna LOOP
v1_2:=sit_lun_f3(i.luna);
DBMS_OUTPUT.PUT_LINE (' '||i.luna||' '||v1_2.v_ob1||' '||v1_2.v_ob2);
END LOOP;
END;
/
DECLARE
CURSOR c_luna IS
SELECT EXTRACT(MONTH FROM data_cursa) AS luna
FROM curse_XY
GROUP BY EXTRACT(MONTH FROM data_cursa)
ORDER BY 1;
v1_2 OB_INF;
v_nluna VARCHAR2(15);
BEGIN
DBMS_OUTPUT.PUT_LINE (' Luna Suma Nr_curse');
DBMS_OUTPUT.PUT_LINE ('--------------------------------------------');
FOR i IN c_luna LOOP
v1_2:=sit_lun_f3(i.luna);
v_nluna:=TO_CHAR(TO_DATE(i.luna, 'MM'), 'MONTH','NLS_DATE_LANGUAGE = romanian');
DBMS_OUTPUT.PUT_LINE (' '||v_nluna||' '||v1_2.v_ob1||' '||v1_2.v_ob2);
END LOOP;
END;
/