Laborator 7: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea I - proceduri) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de blo

Documente similare
Laborator 8: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea II - functii) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de bloc

RZOLVARE EXERCITIU ZODII declare cursor distributie_zodie is select nume_zodie, count(*) distributie from zodiac z join utilizatori u on to_date(to_ch

Aggregating Data

Baze de date-Anul 2 (semestrul 2)

proiectarea bazelor de date

PHP (II)

Laborator02

Managementul Resurselor Umane

Baze de date - Anul 2 Laborator 8 Limbajul de definire a datelor (LDD) (partea I) În general, instrucţiunile LDD sunt utilizate pentru definirea struc

Baze de date

Laborator5_SQL_an2

Microsoft Word - Curs 11 - PHP.doc

Proceduri stocate Syntax: CREATE PROCEDURE <Name> type1,...] AS -- secventa de comenzi SQL GO O procedura stocata se ruleaza cu EXEC: EXEC <N

aplicatii java

Microsoft Word - Curs_07.doc

Top

Paradigme de Programare

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

Limbaje de Programare Curs 6 – Functii de intrare-iesire

SUBPROGRAME

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Baze de date - Anul 2 Laborator 9 Limbajul de definire a datelor (LDD) - II : Definirea vizualizărilor, secvenţelor, indecşilor, sinonimelor, tabelelo

Prezentarea calculatorului

Laborator 3

PowerPoint Presentation

Raportarea serviciilor de dializă la nivel CNAS

Metode API - integrare FGO v.2.5 Cuprins ISTORIC VERSIUNI... 2 INTRODUCERE... 2 APELARE... 4 NOMENCLATOARE... 4 FACTURA... 5 EMITERE... 5 PRINT... 6 S

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

proiectarea bazelor de date

Documentaţie Tehnică Verificare TVA API Ultima actualizare: 1 ianuarie / 92 1

PowerPoint Presentation

E_d_Informatica_sp_SN_2014_bar_10_LRO

Slide 1

Raportarea serviciilor de dializă la nivel CJAS

tehnologii web

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

PowerPoint Presentation

Paradigme de programare

Microsoft Word - CarteC.doc

E_d_Informatica_sp_MI_2015_bar_02_LRO

Proiectarea Sistemelor Software Complexe

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Mai multe despre optimizare

Programarea şi utilizarea calculatoarelor

PowerPoint Presentation

Declararea variabilelor

Addendum Syllabus 6 Microsoft Access 2016 REF Syllabus 6.0 Cunoașterea domeniilor în care se utilizează bazele de date Datorită potenţialului ma

Baze de date-Anul 2

Laborator - Configurarea Rutelor IPv4 Statice și Implicite Topologie Tabela de Adresare Echipame nt Interfață Adresă IP Masca de subreţea Default Gate

1 Lucrarea nr. 8 - Structuri de date de tip liste sortate O listă sortată reprezintă un aranjament al înregistrărilor din cadrul listei în funcţie de

Introducere în limbajul JavaScript

Limbaje de Programare Curs 8 – Fisiere

Utilizarea îmbinării corespondenței pentru crearea şi imprimarea scrisorilor şi a altor documente Dacă utilizați îmbinarea corespondenței când doriți

Modulul 1 M1-2.3 Protocoale şi servicii în reţea În acest capitol ne propunem să abordăm următoarele: Protocoalele şi aplicaţiile folosite în reţelele

Utilizare Internet

Entrepreneurship and Technological Management

Metode API - integrare FGO v.2.8 Cuprins ISTORIC VERSIUNI... 2 INTRODUCERE... 2 APELARE... 4 NOMENCLATOARE... 4 FACTURA... 4 EMITERE... 4 PRINT... 6 S

PowerPoint Presentation

A

Laborator Activities În sistemul Android activitățile reprezintă echivalentul ferestrelor din Windows, fiind clase care extind clasa Activity. Spre de

Ingineria Sistemelor de Programare

Modul Modbus ASCII SISTEME DE COMUNICATIE CURS 5 - Constantinescu Catalin Atunci cand se foloseste modul MODBUS ASCII fiecare octet din mesaj

Creational design patterns

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Lucrarea nr. 2 Aplicaţii de tip client Mihai IVANOVICI 6 martie 2006 Scopul acestei lucrări este de a vă familiariza cu modulul Python socket şi cu mo

CABINET MINISTRU

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

Addendum Syllabus 6 Microsoft Word 2016 REF Syllabus 6.0 Crearea unui document nou pe baza unor șabloane disponibile local sau online Microsoft

Lab6LCD

Microsoft PowerPoint - UBD3-slides.ppt

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

ADRIAN TRIF BAZE DE DATE APLICAŢII ACCESS UTPRESS Cluj-Napoca, 2019 ISBN

Subiectul 1

Metode avansate de gestiune a documentelor și a sistemelor de calcul - LABORATOR 1 -

ALGORITHMICS

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Microsoft Word _POO_Lab_1_Modificari_v01.htm

PowerPoint Presentation

carteInvataturaEd_2.0_lectia5.pdf

Norma nr

Ghid de Referință Explicații sumare ale operațiunilor de rutină HL-L2312D HL-L2357DW HL-L2352DW HL-L2372DN HL-L2375DW Brother recomandă să păstrați ac

Microsoft Word - PCLP2_Curs_4_2019.doc

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

Metode avansate de gestiune a documentelor și a sistemelor de calcul - curs 1 -

Object Oriented Programming

Prezentarea calculatorului

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

Advance CAD 2016 SP1 Acest document descrie îmbunătățirile pentru Advance CAD 2016 Service Pack 1. Notă: Advance CAD 2016 Service Pack 1 este compatib

MIdland CT210 manual

aplicatii java

Ghid utilizare aplicație PARKING BUCUREȘTI Aplicație PARKING BUCUREȘTI 1

Tipuri de date abstracte 30 noiembrie 2005 Programarea calculatoarelor 2. Curs 9 Marius Minea

Metode de programare Proiectarea algoritmilor

PROGRAMARE OBIECT-ORIENTATA LABORATOR 1 INTRODUCERE IN CLASE SI OBIECTE Introducere teoretica Prin intermediul unei Clase ne dorim sa construim tipuri

Metode API - integrare FGO v.3.0 Cuprins ISTORIC VERSIUNI... 2 INTRODUCERE... 2 APELARE... 4 NOMENCLATOARE... 4 FACTURA... 4 EMITERE... 4 PRINT... 6 S

Laborator 2 - Încapsularea Programare Orientată pe Obiecte Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema

REALIZAREA UNUI SISTEM CU COMANDA PROGRAMATĂ. EXEMPLU SCOPUL LUCRĂRII Parcurgerea etapelor de proiectare HW şi SW a unui sistem cu comandă programată

Transcriere:

Laborator 7: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea I - proceduri) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de blocurile anonime) care poate primi parametri şi poate fi invocat dintr-un anumit mediu ( de exemplu, SQL*Plus, Oracle Forms, Oracle Reports etc.) Subprogramele sunt bazate pe structura de bloc PL/SQL. Similar, ele conţin o parte declarativă opţională, o parte executabilă obligatorie şi o parte de tratare de excepţii opţională. Exista 2 tipuri de subprograme: 1. proceduri; 2. funcţii (trebuie să conţină cel puţin o comandă RETURN); Subprogramele pot fi: o locale (în cadrul altui bloc PL/SQL sau subprogram) o stocate (create cu comanda CREATE) - odată create, procedurile şi funcţiile sunt stocate în baza de date, motiv pentru care se numesc subprograme stocate. Sintaxa simplificată pentru crearea unei proceduri este următoarea: [CREATE [OR REPLACE] ] PROCEDURE nume_procedură [ (lista_parametri) ] {IS AS} [declaraţii locale] partea executabilă [EXCEPTION partea de tratare a excepţiilor] END [nume_procedură]; Lista de parametri conţine specificaţii de parametri separate prin virgulă de forma: nume_parametru mod_parametru tip_parametru; mod_parametru specifică dacă parametrul este: de intrare (IN) singurul care poate avea o valoare iniţială de intrare / ieşire (IN OUT) de ieşire (OUT) mod_parametru are valoarea implicită IN. În cazul în care se modifică un obiect (vizualizare, tabel etc) de care depinde un subprogram, acesta este invalidat. Revalidarea se face fie prin recrearea subprogramului fie prin comanda: ALTER PROCEDURE nume_proc COMPILE; Ştergerea unei proceduri se realizează prin comenzile: DROP PROCEDURE nume_proc;

Informaţii despre procedurile deţinute de utilizatorul curent se pot obţine interogând vizualizarea USER_OBJECTS din dicţionarul datelor. SELECT OBJECT_NAME, OBJECT_TYPE, STATUS FROM USER_OBJECTS WHERE OBJECT_TYPE IN ('PROCEDURE'); Obs: STATUS starea subprogramului (validă sau invalidă). Codul complet al unui subprogram poate fi vizualizat folosind următoarea sintaxă: SELECT TEXT FROM USER_SOURCE WHERE NAME = 'nume_subprogram' ORDER BY LINE; Eroarea apărută la compilarea unui subprogram poate fi vizualizată folosind următoarea sintaxă: SELECT LINE, POSITION, TEXT FROM USER_ERRORS WHERE NAME = 'nume'; Erorile pot fi vizualizate şi prin intermediul comenzii SHOW ERRORS. Descrierea specificaţiei unui subprogram se face prin comanda DESCRIBE. Când este apelată o procedură PL/SQL, sistemul Oracle furnizează două metode pentru definirea parametrilor actuali: o specificarea explicită prin nume o specificarea prin poziţie Exemplu: subprog(a tip_a, b_tip_b, c tip_c, d tip_d) - specificare prin poziţie: subprog(var_a,var_b,var_c,var_d); - specificare prin nume: subprog(b=>var_b,c=>var_c,d=>var_d,a=>var_a); - specificare prin nume şi poziţie: subprog(var_a,var_b,d=>var_d,c=>var_c); Probleme rezolvate a) Proceduri locale 1. Să se declare o procedură locală într-un bloc PL/SQL anonim prin care să se introducă în tabelul DEPT_pnu o nouă înregistrare precizând, prin intermediul parametrilor, valori pentru toate câmpurile. Invocaţi procedura în cadrul blocului. Interogaţi tabelul DEPT_pnu şi apoi anulaţi modificările (ROLLBACK). DECLARE PROCEDURE add_dept (p_cod dept_pnu.deptno %TYPE,

p_nume dept_pnu.dname %TYPE, p_manager dept_pnu.mgr_id %TYPE, p_location dept_pnu.loc_no%type) IS INSERT INTO dept_pnu VALUES (p_cod, p_nume, p_manager, p_location); Add_dept(45, 'DB Administration', 100, 2700); SELECT * FROM dept_pnu; ROLLBACK; 2. Să se declare o procedură locală care are parametrii următori: - p_rezultat (parametru de tip OUT) de tipul coloanei ename din tabelul EMP; - p_comision (parametru de tip IN) de tipul coloanei commdin EMP, iniţializat cu NULL; - p_cod (parametru de tip IN) de tipul coloanei emp_id din LOYEES, iniţializat cu NULL. Dacă p_comision nu este NULL atunci în p_rezultat se va memora numele salariatului care are salariul maxim printre salariaţii având comisionul respectiv. În caz contrar, în p_rezultat se va memora numele salariatului al cărui cod are valoarea dată la apelarea procedurii. DECLARE v_nume emp.ename%type; PROCEDURE p2l4_pnu (p_rezultat OUT emp.ename% TYPE, p_comision IN emp.comm%type:=null, p_cod IN emp.empno %TYPE:=NULL) IS IF (p_comision IS NOT NULL) THEN SELECT ename INTO p_rezultat WHERE comm = p_comision AND sal = (SELECT MAX(sal) WHERE comm= p_comision); DBMS_OUTPUT.PUT_LINE('Numele salariatului care are comisionul ' p_comision ' este ' p_rezultat); ELSE SELECT ename INTO p_rezultat WHERE empno = p_cod;

DBMS_OUTPUT.PUT_LINE('numele salariatului avand codul ' p_cod ' este ' p_rezultat); END IF; -- partea executabilă a blocului p2l4_pnu (v_nume,0.4); --specificare prin pozitie a parametrilor actuali p2l4_pnu (v_nume, p_cod=>205); -- specificare prin pozitie si nume a parametrilor actuali 3. Să se creeze o procedură stocată fără parametri care afişează un mesaj Programare PL/SQL, ziua de astăzi în formatul DD-MONTH-YYYY şi ora curentă, precum şi ziua de ieri în formatul DD-MON-YYYY. CREATE PROCEDURE first_pnu IS azi DATE := SYSDATE; ieri azi%type; DBMS_OUTPUT.PUT_LINE( Programare PL/SQL ) ; DBMS_OUTPUT.PUT_LINE(TO_CHAR(azi, dd-month-yyyy hh24:mi:ss )); ieri := azi -1; DBMS_OUTPUT.PUT_LINE(TO_CHAR(ieri, dd-mon-yyyy )); La promptul SQL apelam procedura astfel: EXECUTE first_pnu; 4. a) Să se creeze o procedură stocată care calculează salariul mediu al angajaţilor, returnândul prin intermediul unui parametru de tip OUT. b) Să se apeleze procedura regăsind valoarea medie a salariilor într-o variabilă gazdă. Afişaţi valoarea variabilei. CREATE OR REPLACE PROCEDURE problema4_pnu (p_salavg OUT emp.sal%type) AS SELECT AVG(sal) INTO p_salavg ; La prompt-ul SQL: VARIABLE g_medie NUMBER

EXECUTE problema4_pnu (:g_medie) PRINT g_medie 5. a) Creaţi o procedură numită GET_EMP_pnu care întoarce salariul şi denumirea job-ului pentru un angajat al cărui cod este transmis ca parametru. b) Executaţi procedura utilizând câte o variabilă gazdă pentru cei doi parametri de tip OUT. c) testaţi procedura atât pentru coduri existente cât şi pentru coduri inexistente din tabelul EMP_pnu. Ce se întâmplă atunci când o invocăm pentru un cod inexistent? 6. a) Analizaţi subprogramele create anterior în vizualizarea din dicţionarul datelor USER_OBJECTS. b) Regăsiţi codul unuia dintre subprogramele create anterior în vizualizarea USER_SOURCE. c) Aflaţi tipul parametrilor uneia dintre procedurile create anterior utilizând comanda DESCRIBE. Probleme propuse spre rezolvare 1. Să se creeze o procedură stocată care măreşte salariile angajaţilor care nu au comision şi au media mai mică decât cea a departamentului în care lucrează cu o valoare transmisă ca parametru. 2. Să se declare o procedură locală care are următorii parametri: - p_rezultat (parametru de ieşire) de tip NUMBER; - p_job (parametru de intrare) de tip job din jobs_pnu, iniţializat cu NULL; - p_titlu (parametru de intrare) de tip job_title din jobs_pnu, iniţializat cu NULL. Dacă job nu este NULL atunci în rezultat se va memora numărul de angajaţi având codul jobului specificat ca parametru. În caz contrar, în rezultat se va memora numărul de angajaţi care au titlul job-ului dat de al treilea parametru din procedura.