Dotazovací jazyk SQL - III

Slides:



Advertisements
Podobné prezentace
Databázové systémy Zabezpečení DBS. Cíle, které je třeba vzít v úvahu při návrhu databázové aplikace z pohledu bezpečnosti: •Důvěrnost - informace by.
Advertisements

Základy jazyka SQL Jan Tichava
Ladislav Hofman, Jan Slavík TUL Předmět databázové systémy
SQL: DDL v ORACLE CREATE TABLE jméno_tabulky (atribut datový_typ [DEFAULT][attribut_constraint] [, atribut datový_typ [DEFAULT] [attribut_constraint]],...
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
Návrh a tvorba WWW Přednáška 6 PHP II – Databáze.
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é.
Fakulta elektrotechniky a informatiky
Cvičení 03 SQL Select Ing. Pavel Bednář
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.
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 II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
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
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
Relační databáze Jakub Lokoč.
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.
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.
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.
Databázové systémy II Přednáška č. 4, 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
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.
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
Databázové systémy II Přednáška V Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
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ů.
MySql – úvod MySql je multiplatformní databázový systém (server a klient). Je napsán v C a C++. Ke stažení je na pro různé platformy, ve.
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B13 Autor Ing. Jiří Kalousek Období vytvoření březen.
Databázové Aplikace Slidy ke cvičení DBI026, část 3 KSI MFF UK Verze
Databázové systémy Zabezpečení DBS. Cíle, které je třeba vzít v úvahu při návrhu databázové aplikace z pohledu bezpečnosti: Důvěrnost - informace by neměly.
Vnořené SQL (embedded SQL) Dotazovací jazyky I
Zanořené SQL a dynamické SQL
Architektury a techniky DS Cvičení č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
1 / 3The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)),
Analýza možností SŘBD PostgreSQL / PostGIS pro vytvoření datového skladu v prostředí GIS Jaromír Kamler Vedoucí: Antonín Orlík.
Tutorial: Obchodní akademie Topic: Logical Functions Prepared by: Mgr. Zdeněk Hrdina Projekt Anglicky v odborných předmětech, CZ.1.07/1.3.09/ je.
1 Syntaxe a sémantika aktivních databází Databázové triggery Aktivní pravidla 10. listopadu 2004 Zuzana Reitermanová & Vojtěch Hlaveš.
Příkazy jazyka SQL ve VFP a na SQL Serveru
EU peníze středním školám Název vzdělávacího materiálu: B2 – Verbs – Computers Číslo vzdělávacího materiálu: ICT12-19 Šablona: III/2 Inovace a zkvalitnění.
Databázové systémy I Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Autor, Název akce Databázové systémy a SQL Lekce 7 Daniel Klimeš.
Databázové systémy II Přednáška č. VII Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
Autor, Název akce Databázové systémy a SQL Lekce 2 Daniel Klimeš 1.
Databázové systémy přednáška 6 – Indexy
Roman Danel Institut ekonomiky a systémů řízení 2016
Jiří Šafr jiri.safr(AT)seznam.cz Poslední aktualizace 25/6/2014
Databázové systémy a SQL
Dotazovací jazyk SQL I.
Embedded SQL Vítězslav Imrýšek.
Databázové systémy přednáška 2 – Datové typy
Architektury a technika databázových systémů
Databázové systémy přednáška 3 – CRUD
Databázové systémy a SQL
Databázové systémy a SQL
A5M33IZS – Informační a znalostní systémy
Databázové systémy a SQL
Počítačová cvičení z předmětu Datové sklady #1 Relační model dat
Přednáška 9 Triggery.
Přednáška 10 Uložené procedury.
Databázové systémy a SQL
Databázové systémy a SQL
Databázové systémy a SQL
Transkript prezentace:

Dotazovací jazyk SQL - III Databázové systémy Dotazovací jazyk SQL - III 1

VIEW I 2

VIEW II 3

VIEW III 4

VIEW IV – Updatable view in PosgreSQL view nominace 5

Indexy I 6

Indexy II 7

Indexy II 8

Indexy III 9

Indexy IV 10

Rozšíření SQL Domény – uživatelsky definované datové typy 11

Rozšíření SQL Uživatelsky definované funkce CREATE FUNCTION one() RETURNS integer AS $$ SELECT 1 AS result; $$ LANGUAGE SQL; CREATE FUNCTION one() RETURNS integer AS ' ' LANGUAGE SQL; SELECT one(); one ----- 1 12

Rozšíření SQL Uživatelsky definované funkce CREATE FUNCTION clean_emp() RETURNS void AS ' DELETE FROM emp WHERE salary < 0; ' LANGUAGE SQL; SELECT clean_emp(); 13

Rozšíření SQL Uživatelsky definované funkce CREATE FUNCTION tf1 (integer, numeric) RETURNS integer AS $$ UPDATE bank SET balance = balance - $2 WHERE accountno = $1; SELECT balance FROM bank WHERE accountno = $1; -- Nebo pouze: RETURNING balance; $$ LANGUAGE SQL; SELECT tf1(17, 100.0); 14

Rozšíření SQL Uživatelsky definované funkce CREATE TABLE foo (fooid int, foosubid int, fooname text); INSERT INTO foo VALUES (1, 1, 'Joe'); INSERT INTO foo VALUES (1, 2, 'Ed'); INSERT INTO foo VALUES (2, 1, 'Mary'); CREATE FUNCTION getfoo(int) RETURNS foo AS $$ SELECT * FROM foo WHERE fooid = $1; $$ LANGUAGE SQL; SELECT *, upper(fooname) FROM getfoo(1) AS t1; fooid | foosubid | fooname | upper 1 | 1 | Joe | JOE 15

Rozšíření SQL Uživatelsky definované funkce CREATE FUNCTION getfoo(int) RETURNS SETOF foo AS $$ SELECT * FROM foo WHERE fooid = $1; $$ LANGUAGE SQL; SELECT *, upper(fooname) FROM getfoo(1) AS t1; fooid | foosubid | fooname 1 | 1 | Joe 1 | 2 | Ed 16

Uložené procedury (Stored procedures) PL/pgSQL, PL/Tcl, PL/Perl, and PL/Python (available in the standard PostgreSQL distribution) Additional procedural languages: PL/Java PL/PHP PL/Py PL/R PL/Ruby PL/Scheme PL/sh 17

Uložené procedury (Stored procedures) CREATE FUNCTION somefunc() RETURNS integer AS $$ << outerblock >> DECLARE quantity integer := 30; BEGIN RAISE NOTICE 'Quantity here is %', quantity; --> 30 quantity := 50; quantity integer := 80; RAISE NOTICE 'Quantity here is %', quantity; --> Prints 80 RAISE NOTICE 'Outer quantity here is %', outerblock.quantity; --> 50 END; RAISE NOTICE 'Quantity here is %', quantity; --> 50 RETURN quantity; $$ LANGUAGE plpgsql; 18

Uložené procedury (Stored procedures) -- PostgreSQL < 8.0 CREATE FUNCTION sales_tax(real) RETURNS real AS $$ DECLARE subtotal ALIAS FOR $1; BEGIN RETURN subtotal * 0.06; END; $$ LANGUAGE plpgsql; -- PostgreSQL >= 8.0 CREATE FUNCTION sales_tax(subtotal real) RETURNS real AS $$ 19

Uložené procedury (Stored procedures) CREATE TABLE foo (fooid INT, foosubid INT, fooname TEXT); CREATE FUNCTION getAllFoo() RETURNS SETOF foo AS $$ DECLARE r foo%rowtype; BEGIN FOR r IN SELECT * FROM foo WHERE fooid > 0 LOOP -- provedeme operace nad r RETURN NEXT r; -- vracíme upravený řádek SELECTu END LOOP; RETURN; END LANGUAGE plpgsql; 20

Uložené procedury (Stored procedures) IF ... THEN IF ... THEN ... ELSE IF ... THEN ... ELSIF ... THEN ... ELSE CASE ... WHEN ... THEN ... ELSE ... END CASE (parametrizovaný) CASE WHEN ... THEN ... ELSE ... END CASE LOOP … END LOOP (může mít <<label>>) WHILE … LOOP … END LOOP FOR … IN … LOOP … END LOOP (IN query: iteruje přes výsledky) EXIT (break, může vést na <<label>>) EXIT WHEN … CONTINUE CONTINUE WHEN ... 21

Uložené procedury (Stored procedures) SELECT * INTO myrec FROM emp WHERE empname = myname; IF NOT FOUND THEN RAISE EXCEPTION 'employee % not found', myname; END IF; INSERT INTO mytab(firstname, lastname) VALUES('Tom', 'Jones'); BEGIN UPDATE mytab SET firstname = 'Joe' WHERE lastname = 'Jones'; x := x + 1; y := x / 0; EXCEPTION WHEN division_by_zero THEN RAISE NOTICE 'caught division_by_zero'; RETURN x; END; 22

Kurzory (Cursors) DECLARE curs1 refcursor; curs2 CURSOR FOR SELECT * FROM tenk1; curs3 CURSOR (key integer) IS SELECT * FROM tenk1 WHERE unique1 = key; OPEN curs1 FOR SELECT * FROM foo WHERE key = mykey; OPEN curs2; OPEN curs3(42); FETCH curs1 INTO rowvar; FETCH curs2 INTO foo, bar, baz; FETCH LAST FROM curs3 INTO x, y; FETCH RELATIVE -2 FROM curs4 INTO x; 23

Kurzory (Cursors) … DECLARE, OPEN ... MOVE curs1; MOVE LAST FROM curs3; MOVE RELATIVE -2 FROM curs4; MOVE FORWARD 2 FROM curs4; UPDATE foo SET dataval = myval WHERE CURRENT OF curs1; (podobně DELETE) CLOSE curs1; CLOSE curs2; CLOSE curs3; 24

Kurzory (Cursors) CREATE FUNCTION myfunc(refcursor, refcursor) RETURNS SETOF refcursor AS $$ BEGIN OPEN $1 FOR SELECT * FROM table_1; RETURN NEXT $1; OPEN $2 FOR SELECT * FROM table_2; RETURN NEXT $2; END; $$ LANGUAGE plpgsql; -- musíme být v transakci, abychom mohli používat cursor BEGIN; SELECT * FROM myfunc('a', 'b'); FETCH ALL FROM a; FETCH ALL FROM b; COMMIT; 25

Triggery CREATE TRIGGER check_update BEFORE UPDATE OF balance ON accounts FOR EACH ROW EXECUTE PROCEDURE check_account_update(); BEFORE UPDATE ON accounts WHEN (OLD.balance IS DISTINCT FROM NEW.balance) CREATE TRIGGER log_update AFTER UPDATE ON accounts WHEN (OLD.* IS DISTINCT FROM NEW.*) EXECUTE PROCEDURE log_account_update(); 26

Triggery CREATE TABLE emp (empname text, salary integer, last_date timestamp, last_user text); CREATE FUNCTION emp_stamp() RETURNS trigger AS $$ BEGIN IF NEW.empname IS NULL THEN RAISE EXCEPTION 'empname cannot be null'; END IF; IF TG_OP = 'UPDATE' AND OLD.salary > 1000000 THEN RAISE EXCEPTION '% had too much', OLD.empname; -- Remember who changed the payroll when NEW.last_date := current_timestamp; NEW.last_user := current_user; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp FOR EACH ROW EXECUTE PROCEDURE emp_stamp(); 27