DBS_I – PL/SQL Vojtěch Hemala ARI. 1/ ZALOZTE SI NASLEDUJICI TABULKY A NAPLNTE JE DATY PODLE VZORU INSERT INTO brew (jmeno) VALUES ('Litovel'); INSERT.

Slides:



Advertisements
Podobné prezentace
Aplikační a programové vybavení
Advertisements

Databázové systémy 2 Cvičení č. 8
Cvičení 05 Joins, isNull, case when Ing. Pavel Bednář
Základy jazyka SQL Jan Tichava
Evoluce Katalýza. © 2011 Nature Publishing Group. Published by Nature Publishing Group.2 Figure 1 Rapid evolutionary innovation during an Archaean.
SQL: DDL v ORACLE CREATE TABLE jméno_tabulky (atribut datový_typ [DEFAULT][attribut_constraint] [, atribut datový_typ [DEFAULT] [attribut_constraint]],...
Daniel.steigerwald.cz Třídy, dědičnost a OOP v Javascriptu.
Tutorial: Mechanic - electrician Topic: Electric measurement the 2nd. year Measuring devices 1 Prepared by: Ing. Jiří Smílek Projekt Anglicky v odborných.
Počítačová grafika pro inženýry - CAD systémy pro DTP - znaky, stránky, dokumenty, tisk, osvitové jednotky pro manažery - obrázky, interpretace pro autory.
Program pro evidenci nákladů a výnosů Jan Lisal. Požadavky Požadavky zadání: Možnost evidence nákladů a výnosů v rámci firmy Možnost evidence práv a uživatelů.
Čtěte a přeložte: Mother is at home. Matka je doma.
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
LOV, Listbox, Poplist a Combobox v Oracle Forms LOV – seznam hodnot, které se zobrazí po stisku klávesy Enter v textovém poli. LOV – seznam hodnot, které.
Jméno autora: Mgr. Mária Filipová Datum vytvoření: Číslo DUMu: VY_32_INOVACE_07_AJ_CM Ročník: 1. – 4. ročník Vzdělávací oblast:Jazyk a jazyková.
Integrated Development Environment datové modely pro SharePoint Michal Černík.
A Dog‘s Life in Winter Prague
Fakulta elektrotechniky a informatiky
WALES „Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Mgr.Dana Brdíčková.
Informační systémy Realizace uložených procedur a spouští, jejich praktické využití.
Informační systémy Realizace sběru dat v rámci realizovaných úloh.
Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.
Čím pojedete na dovolenou ? Co takhle autíčkem ?.
Budoucí čas prostý autor: Petr Baťa.
Informatika pro ekonomy II přednáška 11
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 2 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy 2 Cvičení č. 6 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Fakulta elektrotechniky a informatiky
Databázové systémy II Přednáška č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Tento Digitální učební materiál vznikl díky finanční podpoře EU- OP Vzdělávání pro konkurenceschopnost. Není –li uvedeno jinak, je tento materiál zpracován.
Educational program: Mechanic - electrician Title of program: Technical training II. class Astable multivibrator Worked out: Bc. Chumchal Miroslav Projekt.
Setkání uživatelů SFX Statistické reporty SFX.
Temporální databáze a TSQL
Relační databáze Jakub Lokoč.
PL/SQL Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd. Rozšířením jazyka SQL.
Michal Augustýn Senior Software AVAST Software Microsoft Most Valuable Professional (ASP.NET/IIS) augi.cz.
SQL Přednáška DB1. Literatura CONNOLLY, T.M.-BEGG,C.E.-STRACHAN,A.D.: Database Systems – A Practial Approach to Design, Implementation and Management.
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
Označení DUM 14 _ 16 _ Pl _ DUM Autor Příjmení a jméno: Pavelková Irena, Bc. Škola: Základní škola a Mateřská škola Štěpánkovice, příspěvková organizace.
Databázové systémy II Přednáška č. 4, 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM Businessland / Operating Instructions 06B13 AutorLadislava Pechová Období.
Jiří Kalva, SPŠ na Proseku
Procedurální rozšíření Transact SQL Michal Kopecký Výběr ze slajdů k 3. přednášce předmětu Databázové Aplikace (DBI026) na MFF UK.
Databázové systémy teorie a návrh relačních databázových systémů část II.
SQL – základní pojmy Ing. Roman Danel, Ph.D.
SQL PVA Jan Hora. SQL „graficky“ Grafický vs. pravý SQL SELECT ORDED BY WHERE.
Databázové systémy 2 Cvičení č. 6 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Architektury a techniky DS Efektivní programování v jazyce PL/SQL
Deduktivní databáze a jejich implementace v relačním prostředí Karel Ježek.
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Informatika II PAA DOTAZOVACÍ JAZYKY
Databázové systémy 2 Zkouška – 8:00. Příklad I – Procedura – 5 bodů Vytvořte proceduru P_ZK2(p_table_name VARCHAR2, p_min_nuls NUMBER, p_drop.
Dynamic SQL P. Částek. Dynamic SQL Embedded SQL je překládaný preprocesorem => za běhu nelze nechat uživatele rozhodovat o vzhledu samotných SQL příkazů.
Databázové Aplikace Slidy ke cvičení DBI026, část 3 KSI MFF UK Verze
Zanořené SQL a dynamické SQL
Architektury a techniky DS Cvičení č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Petr Čermák Michal Danihelka
Příkazy jazyka SQL ve VFP a na SQL Serveru
Autor, Název akce Databázové systémy a SQL Lekce 7 Daniel Klimeš.
Dotazovací jazyk SQL - III
Databázové systémy a SQL
Architektury a technika databázových systémů
Databázové systémy a SQL
Databázové systémy a SQL
Přednáška 9 Triggery.
Přednáška 10 Uložené procedury.
Databázové systémy a SQL
Module 13: Lesson 13.2 Understanding Inverse Functions
Transkript prezentace:

DBS_I – PL/SQL Vojtěch Hemala ARI

1/ ZALOZTE SI NASLEDUJICI TABULKY A NAPLNTE JE DATY PODLE VZORU INSERT INTO brew (jmeno) VALUES ('Litovel'); INSERT INTO brew (id_p,jmeno) VALUES ( 'Holba'); INSERT INTO brew (id_p,jmeno) VALUES ('Branik');... END; INSERT INTO funkce (nazev) VALUES ('Vedouci'); INSERT INTO funkce (nazev) VALUES ('Skladnik');... END; INSERT INTO emp(id_zam,prijmeni,vek,prace,prislusnost,jmeno,plat) VALUES ( 'Konecny',35,3,104,'Karel',15200); INSERT INTO emp(id_zam,prijmeni,vek,prace,prislusnost,jmeno,plat) VALUES ('Prisoudil',42,1,106,'Jiri',13600); INSERT INTO emp(id_zam,prijmeni,vek,prace,prislusnost,jmeno,plat) VALUES ( 'Kvapil',38,2,108,'Petr',14800); INSERT INTO emp(id_zam,prijmeni,vek,prace,prislusnost,jmeno,plat) VALUES ( 'Zabransky',53,4,109,'Pavel',16000); INSERT INTO emp(id_zam,prijmeni,vek,prace,prislusnost,jmeno,plat) VALUES ('Volejnik',46,5,105,'Milan',11300);... END; CREATE table "FUNKCE" ( "ID_F" NUMBER, "NAZEV" VARCHAR2(4000), constraint "FUNKCE_PK" primary key ("ID_F")) CREATE table "BREW" ( "ID_P" NUMBER, "JMENO" VARCHAR2(4000), constraint "BREW_PK" primary key ("ID_P")) CREATE table "EMP" ( "ID_ZAM" NUMBER, "PRIJMENI" VARCHAR2(4000), "VEK" NUMBER, "PRACE" NUMBER, "PRISLUSNOST" NUMBER, "JMENO" VARCHAR2(4000), "PLAT" NUMBER, constraint "EMP_PK" primary key ("ID_ZAM")) ALTER TABLE "EMP" ADD CONSTRAINT "EMP_FK" FOREIGN KEY ("PRACE") REFERENCES "FUNKCE" ("ID_F") ON DELETE SET NULL ALTER TABLE "EMP" ADD CONSTRAINT "EMP_FK2" FOREIGN KEY ("PRISLUSNOST") REFERENCES "BREW" ("ID_P") ON DELETE SET NULL

2/ VYPIS CELEHO JMENA ZAMESTNANCE PIVOVARU Napiste funkci cele_jmeno, jejiz vstupnim parametrem bude id zamestnance a ktera bude vracet cele jmeno zamestnance (podobnou funkci jste jiz na cviceni vytvareli!). CREATE OR REPLACE FUNCTION cele_jmeno(p_id IN INTEGER) RETURN VARCHAR2 AS v_emp_name VARCHAR2(100); v_false brew.jmeno%TYPE :='Zadany zamestnanec neexistuje'; BEGIN SELECT jmeno ||' '|| prijmeni INTO v_emp_name FROM emp WHERE id_zam=p_id; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN v_false; END; RETURN v_emp_name; END;

3/FUNKCE VRACEJICI POCET ZAMESTNANCU PIVOVARU Napiste funkci, jejiz vstupnim parametrem bude nazev pivovaru a která bude vracet pocet jeho zamestnancu. Funkce se bude jmenovat pocet_zamcu. CREATE OR REPLACE FUNCTION pocet_zamcu(p_nazev IN VARCHAR2) RETURN VARCHAR2 AS v_pocet_zam VARCHAR2(50); v_pom NUMBER; v_false brew.jmeno%TYPE := 'Zadany pivovar neexistuje'; BEGIN SELECT count(*) INTO v_pom FROM emp e JOIN brew b ON e.prislusnost=b.id_p WHERE b.jmeno = INITCAP(p_nazev); v_pocet_zam := TO_CHAR(v_pom); IF v_pom >= 1 THEN RETURN v_pocet_zam; ELSE RETURN v_false; END IF; END;

4/ FUNKCE VRACEJICI NAZEV PIVOVARU, POCET VYSKYTUJICICH SE FUNKCI A PRUMERNY PLAT CREATE OR REPLACE FUNCTION piv_stat(p_id_pivovaru IN brew.id_p%TYPE) RETURN VARCHAR2 AS v_nazev_piv VARCHAR2(50); v_funkce VARCHAR2(200); v_plat emp.plat%TYPE; v_jmeno VARCHAR2(200); v_pom VARCHAR2(50); v_false brew.jmeno%TYPE := 'Zadany pivovar nenalezen'; cursor c_emp IS SELECT DISTINCT f.nazev FROM funkce f INNER JOIN emp e ON e.prace=f.id_f WHERE e.prislusnost=p_id_pivovaru; BEGIN v_funkce := ' --> pozice: '; BEGIN SELECT jmeno INTO v_nazev_piv FROM brew WHERE id_p=p_id_pivovaru; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN v_false; END;

Napiste funkci, jejiz vstupnim parametrem bude id pivovaru a ktera bude vracet jeho nazev, nazvy funkci, ktere se v pivovaru vyskytuji (kazdou funkci jen jednou!), a prumerny plat v danem pivovaru. Funkce se bude jmenovat piv_stat. v_jmeno := 'Nazev pivovaru: '|| v_nazev_piv; SELECT ROUND(AVG(plat)) INTO v_plat FROM emp WHERE prislusnost=p_id_pivovaru; OPEN c_emp; LOOP FETCH c_emp INTO v_pom; EXIT WHEN c_emp%NOTFOUND; IF c_emp%ROWCOUNT = 1 THEN v_funkce := v_funkce||v_pom; ELSE v_funkce := v_funkce||', '||v_pom; END IF; END LOOP; CLOSE c_emp; v_jmeno:=v_jmeno||v_funkce||' --> prumernu plat: '||v_plat; RETURN v_jmeno; END;

5/ PROCEDURA S PARAMETRICKYM KURZOREM CREATE OR REPLACE PROCEDURE emp_info(p_nazev_fce IN VARCHAR2) AS v_fce NUMBER; v_false brew.jmeno%TYPE := 'Zadana funkce neexistuje'; cursor c_emp(p_fce IN NUMBER) IS SELECT e.jmeno,e.prijmeni,e.vek,e.plat FROM emp e JOIN funkce f ON e.prace=f.id_f WHERE f.id_f=p_fce; BEGIN DBMS_OUTPUT.PUT_LINE('Vypis osob s funkci: '||INITCAP(p_nazev_fce)); BEGIN SELECT id_f INTO v_fce FROM funkce WHERE nazev=INITCAP(p_nazev_fce); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(v_false); END; FOR info IN c_emp(v_fce) LOOP DBMS_OUTPUT.PUT_LINE('Jmeno: '||info.jmeno||' '||info.prijmeni||', Plat: '||info.plat ||', Vek: '||info.vek); EXIT WHEN c_emp%NOTFOUND; END LOOP; END;

6/ PROCEDURA S VKLADANIM CREATE OR REPLACE PROCEDURE zaloz_zamce(p_prijmeni IN VARCHAR2, p_jmeno IN VARCHAR2,p_vek IN NUMBER,p_plat IN NUMBER,p_naz_fce IN VARCHAR2, p_naz_piv IN VARCHAR2) AS v_id_funkce NUMBER; v_id_piv NUMBER; v_id_zam NUMBER; cursor c_emp IS SELECT id_zam,jmeno,prijmeni,plat,vek FROM emp e WHERE e.prijmeni=INITCAP(p_prijmeni) AND e.jmeno=INITCAP(p_jmeno) AND e.vek=p_vek AND e.plat=p_plat; BEGIN SELECT count(id_f) INTO v_id_funkce FROM funkce WHERE nazev=INITCAP(p_naz_fce); IF v_id_funkce=0 THEN DBMS_OUTPUT.PUT_LINE('Zakladam novou funkci: '||INITCAP(p_naz_fce)); INSERT INTO funkce(nazev) VALUES (INITCAP(p_naz_fce)); ELSE DBMS_OUTPUT.PUT_LINE('Funkce jiz existuje'); END IF; SELECT id_f INTO v_id_funkce FROM funkce WHEREnazev=INITCAP(p_na_fce) DBMS_OUTPUT.PUT_LINE('Id funckce je: '||v_id_funkce);

Napiste proceduru, jejimiz parametry bude prijmeni, jmeno, vek, plat, nazev funkce a nazev pivovaru.Kdyz neni zadana funkce,vytvori se nova, to stejne s pivovarem. Nakonec v pripade, ze nebude existovat ani samotny zamestnanec, bude i on pridan do tabulky zamci. SELECT count(id_p) INTO v_id_piv FROM brew WHEREjmeno=p_naz_piv); IF v_id_piv=0 THEN DBMS_OUTPUT.PUT_LINE('Zakladam pivovar: '||INITCAP(p_naz_piv)); INSERT INTO brew(jmeno) VALUES (INITCAP(p_naz_piv)); ELSE DBMS_OUTPUT.PUT_LINE('Pivovar jiz existuje'); END IF; SELECT id_p INTO v_id_piv FROM brew WHERE jmeno=p_naz_piv; DBMS_OUTPUT.PUT_LINE('Id pivovaru je: '||v_id_piv); SELECT count(id_zam) INTO v_id_zam FROM emp e WHERE e.prijmeni=INITCAP(p_prijmeni) AND e.jmeno=INITCAP(p_jmeno) AND e.vek=p_vek AND e.plat=p_plat; IF v_id_zam=0 THEN DBMS_OUTPUT.PUT_LINE('Zakladam noveho zamestnance!'); INSERT INTO emp(prijmeni,jmeno,vek,plat,prace,prislusnost) VALUES(INITCAP(p_prijmeni),INITCAP(p_jmeno),p_vek,p_plat, v_id_funkce,v_id_piv ); ELSE DBMS_OUTPUT.PUT_LINE('Zamestnanec jiz existuje'); END IF;

FOR info IN c_emp LOOP DBMS_OUTPUT.PUT_LINE('ID zamestnance: '||info.id_zam); DBMS_OUTPUT.PUT_LINE('Prijmeni: '||info.prijmeni); DBMS_OUTPUT.PUT_LINE('Jmeno: '||info.jmeno); DBMS_OUTPUT.PUT_LINE('Vek: '||info.vek); DBMS_OUTPUT.PUT_LINE('Plat: '||info.plat); EXIT WHEN c_emp%NOTFOUND; END LOOP; END;

7/ DML TRIGGER CREATE OR REPLACE TRIGGER "BI_EMP" BEFORE insert on "EMP" FOR each row BEGIN if :NEW."ID_ZAM" is null then SELECT "EMP_SEQ".nextval into :NEW."ID_ZAM" from dual; end if; END; Napiste trigger, ktery automatizovane zajisti vlozeni ID_ZAM z prislusne sekvence pri vkladni noveho zaznamu do tabulky EMP.

Děkuji za pozornost… …a dotazy?