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.

Slides:



Advertisements
Podobné prezentace
PLAYBOY Kalendar 2007.
Advertisements

Pro začátek něco lehčího
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Vlastní skript může být umístěn: v hlavičce stránky v těle stránky
Dynamické dokumenty na straně klienta Informatika pro ekonomy II.
Ladislav Hofman, Jan Slavík TUL Předmět databázové systémy
Aplikační a programové vybavení
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
Pascal - větvení.
Příkazy Přednáška č. 4. Příkazy (statements)  Příkaz – dílčí krok programu (část kódu – zpravidla jeden řádek)  Program – posloupnost příkazů  Příkazy.
1 Vnitřní řazení s využitím dynamických struktur Tvorba spojového seznamu je vcelku triviální záležitostí: a)Vytvořím prázdný seznam příkazem LIST:=nil.
Fakulta elektrotechniky a informatiky
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.
Další dotazy SQL Structured Query Language. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
Informatika pro ekonomy II přednáška 11
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
If-else, do-while, switch, operátory
Programování v Pascalu Přednáška 7
Uživatelé, Role, Schémata
Materiály k přednášce Úvod do programování Ondřej Čepek.
Relační databáze Jakub Lokoč.
Radek Špinka Přepínače MSSQL výběr.
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.
Vizualizace projektu větrného parku Stříbro porovnání variant 13 VTE a menšího parku.
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.
Informatika I 3. přednáška

Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
Databázové systémy II Přednáška č. 4, 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Deklarace Radim Štefan. 2 Použité zkratky BP – Borland Pascal De – Delphi.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Jazyk vývojových diagramů
KIV/ZIS cvičení 6 Tomáš Potužák. Pokračování SQL Klauzule GROUP BY a dotazy nad více tabulkami Stáhnout soubor studenti_dotazy_sql.mdb.
Databázové systémy I Cvičení č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Databázové systémy 2 Cvičení č. 6 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
5. Procedury a funkce Procedura je samostatně odladěný algoritmus, v programu může být volána vícekrát. Dvojí terminologie - rozlišujeme procedury a funkce.
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
2 CYKLUS S PEVNÝM POČTEM OPAKOVÁNÍ Podle řídící proměnné proveď n-krát příkaz P1.
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Copyright (C) 1999 VEMA počítače a projektování, spol. s r.o.1 Lucián Piller Intranet HR.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
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ů.
Aplikační a programové vybavení
Databázové Aplikace Slidy ke cvičení DBI026, část 3 KSI MFF UK Verze
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
Pascal - větvení.
Databázové Aplikace Slidy k přednášce DBI026 KSI MFF UK
Roman Danel Institut ekonomiky a systémů řízení 2016
Dotazovací jazyk SQL - III
Databázové systémy a SQL
TNPW1 JavaScript Ing. Jiří Štěpánek.
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
Databázové systémy a SQL
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
Databázové systémy a SQL
Přednáška 9 Triggery.
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Přednáška 10 Uložené procedury.
Databázové systémy a SQL
Transkript prezentace:

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

DBI026 -DB Aplikace - MFF UK 2 Procedurální rozšíření SQL proč jej používat Ve standardním SQL server obdrží a vyhodnotí vždy jednotlivý příkaz. V daném případě se odešle 2n paketů na server a 2n paketů zpět. for (;;) { FETCH; if (…) break; if (…) INSERT …; else UPDATE …; }; n x

DBI026 -DB Aplikace - MFF UK 3 Procedurální rozšíření SQL proč jej používat Pomocí procedurálního rozšíření je možné na server odeslat a zpracovat rozsáhlejší kus kódu včetně řízení toku V daném případě se odešle 1 paket na server a 1 paket zpět. LOOP FETCH; EXIT WHEN (…); IF (…) THEN INSERT …; ELSE UPDATE …; END LOOP; 1 1

DBI026 -DB Aplikace - MFF UK 4 Procedurální rozšíření SQL proč jej používat Šetření komunikačního kanálu –Menší množství odesílaných povelů v jednom povelu je vetší množství příkazů –Podstatně menší objem přenesených dat Data se zpracují na serveru bez přenosu na klienta –Odlehčení klienta Možnost ukládat a vykonávat kód na serveru Kód na serveru může být používán všemi klientskými aplikacemi

DBI026 -DB Aplikace - MFF UK 5 Procedurální rozšíření SQL použití Rozšíření možností serveru o další uživatelské funkce a procedury Zvýšená ochrana integrity dat –Triggery –Zapouzdření povolených manipulací s daty do procedur a funkcí Aplikace nemusí mít práva pro přímý přístup k tabulkám

DBI026 -DB Aplikace - MFF UK 6 Procedurální rozšíření SQL problémy Podstatně menší přenositelnost než v případě definic tabulek a příkazů pro manipulaci s daty (INSERT, UPDATE, DELETE) Standardizováno poprvé v SQL-99 –Řada proprietárních řešení v jednotlivých implementacích serverů –Navzájem nekompatibilní

DBI026 -DB Aplikace - MFF UK 7 Struktura Bloky kódu s pevnou strukturou Příkazy ukončené středníkem [DECLARE deklarace] BEGIN výkonná část [EXCEPTION ošetření výjimek] END; Posloupnosti příkazů Nemusí být ukončeny středníkem DECLARE sekce je chápána jako příkaz BEGIN … END také

DBI026 -DB Aplikace - MFF UK 8 Struktura DECLARE podil NUMBER; BEGIN SELECT citatel/jmenovatel INTO podil FROM Zlomky WHERE citatel=123; IF podil > 0 THEN UPDATE Zlomky SET Vysledek=Podil WHERE citatel=123; END IF; END; FLOAT = citatel/jmenovatel FROM Zlomky WHERE citatel=123 > 0 UPDATE Zlomky SET Vysledek WHERE citatel=123

DBI026 -DB Aplikace - MFF UK 9 Deklarace proměnných jméno [CONSTANT] typ [:= výraz]; Základní typy –Standardní –BOOLEAN obsahující TRUE, FALSE, [AS] typ

DBI026 -DB Aplikace - MFF UK 10 Příkazy Prázdný příkaz NULL; Přiřazovací příkaz prom := výraz; SQL příkaz UPDATE Emp SET Sal = Sal*1.05; DELETE FROM Emp WHERE EmpNo=1; Přiřazovací příkaz = výraz SQL příkaz UPDATE Emp SET Sal = Sal*1.05; DELETE FROM Emp WHERE EmpNo=1

DBI026 -DB Aplikace - MFF UK 11 Příkazy SELECT, vracející právě jednu řádku SELECT výr 1 [, …] INTO prom 1 [, …] FROM … WHERE …; SELECT, vracející právě jednu řádku 1 = výr 1 [, …] FROM … WHERE …;

DBI026 -DB Aplikace - MFF UK 12 T-SQL procedury CREATE PROCEDURE jmproc [; číslo] [deklarace_parametru [, …]] [WITH RECOMPILE] AS příkazy [;] –Deklarace typ [= výraz] [OUT[PUT]] –OUT[PUT] parametr je výstupní –číslo umožňuje vytvoření více verzí stejné procedury –Volání procedury EXEC[UTE] jmproc [výraz [, …]] –Parametry se předávají podle pořadí EXEC[UTE] jmproc [, …]] –Parametry se předávají podle jména

DBI026 -DB Aplikace - MFF UK 13 T-SQL procedury CREATE PROCEDURE INTEGER = NULL AS UPDATE Emp SET Sal Comm WHERE EXEC = = 15500; GO EXEC UpdEmpSal 4321, 14000, 500; GO

DBI026 -DB Aplikace - MFF UK 14 T-SQL funkce CREATE FUNCTION jmfunc [(deklarace_parametru [, …])] RETURNS typ [AS] BEGIN … RETURN výraz; END [;] –Volání funkce shodné se standardní funkcí Závorky musí být i v případě fce bez parametrů SELECT jmfunc ([výraz [, …]]) FROM …; –Parametry se předávají podle pořadí SELECT jmfunc [, …]]) FROM …; –Parametry se předávají podle jména

DBI026 -DB Aplikace - MFF UK 15 T-SQL funkce CREATE FUNCTION Polynom2 FLOAT = FLOAT = FLOAT = 0 ) RETURNS FLOAT AS BEGIN RETURN END; GO SELECT -- 2*x, x=1, tj *x+5, x=2, tj. 11 SELECT Polynom2(2, 1, 1, 1); -- x2+x+1, x=2, tj. 7

DBI026 -DB Aplikace - MFF UK 16 T-SQL funkce vracející tabulku CREATE FUNCTION jmfunc [(deklarace_parametru [, …])] RETURNS TABLE [AS] RETURN [(] SELECT …[)] –Použití jako pohled (tentokrát i s parametry) SELECT * FROM jmfunc ([výraz [, …]]);

DBI026 -DB Aplikace - MFF UK 17 T-SQL funkce vracející tabulku CREATE FUNCTION jmfunc [(deklarace_parametru [, …])] TABLE (def. tabulky) [AS] BEGIN tělo, vkládající data do RETURN END [;] –Použití jako pohled (tentokrát i s parametry) SELECT * FROM jmfunc ([výraz [, …]]);

DBI026 -DB Aplikace - MFF UK 18 Řídící příkazy - IF IF podmínka THEN příkazy IF [ELSIF podmínka THEN příkazy ELSIF1 [ELSIF podmínka THEN příkazy ELSIF2 …]] [ELSE příkazy ELSE ] END IF; Podmínka, vyhodnocená jako NULL je považována za nesplněnou IF podmínka příkaz IF | blok IF [ELSE příkaz ELSE | blok ELSE ] Podmínka, vyhodnocená jako NULL je považována za nesplněnou

DBI026 -DB Aplikace - MFF UK 19 Řídící příkazy - WHILE WHILE podmínka LOOP … [EXIT WHEN podmínka] … END LOOP; While-cyklus s možným výskokem uprostřed WHILE podmínka příkaz WHILE | blok WHILE BREAK ukončí cyklus CONTINUE ukončí iteraci

DBI026 -DB Aplikace - MFF UK 20 SELECT příkazy – T-SQL SELECT [, …] FROM … WHERE …; Musí vracet právě jednu řádku, jinak výjimka VARCHAR(30) = = EName FROM EMP WHERE EmpNo=1

DBI026 -DB Aplikace - MFF UK 21 Víceřádkový SELECT – T-SQL Víceřádkové SELECT příkazy bez INTO lze zpracovat jedině pomocí kurzorů Po každém FETCH je nutné zkontrolovat –0 … v pořádku –-1 … za koncem kurzoru –-2 … řádka chybí DECLARE C CURSOR FOR SELECT * FROM EMP; OPEN C; FETCH NEXT FROM C; WHILE BEGIN … FETCH NEXT FROM C; END; CLOSE C; DEALLOCATE C;

DBI026 -DB Aplikace - MFF UK 22 Kurzory Deklarace –C [SCROLL] CURSOR FOR SELECT …; Získání dat –FETCH {NEXT | PRIOR | ABSOLUTE n | RELATIVE n | LAST | FIRST} FROM C [, …]] –Pokud kurzor není deklarovaný s klíčovým slovem SCROLL, je možné použít jen NEXT

DBI026 -DB Aplikace - MFF UK 23 Výjimky Slouží k ošetření výjimečných stavů při vykonávání SQL příkazů K výjimkám dochází velmi často Je nutné je korektně obsloužit

DBI026 -DB Aplikace - MFF UK 24 Výjimky Typy výjimek –Určené k ošetření na serveru či v klientské aplikaci Standardní pojmenované výjimky –Generované serverem, mají přidělené jméno Standardní nepojmenované výjimky –Generované serverem, nemají přidělené jméno –Určené k ošetření na serveru Uživatelské vnitřní výjimky –Definované uživatelem, mají jméno, nemají popis –Určené k ošetření v klientské aplikaci Uživatelské aplikační výjimky –Definované uživatelem, nemají jméno, mají popis

DBI026 -DB Aplikace - MFF UK 25 Výjimky – T-SQL BEGIN TRY příkaz END TRY BEGIN CATCH příkaz END CATCH Funkce pro identifikaci chyb –ERROR_NUMBER() –ERROR_SEVERITY() –ERROR_STATE() –ERROR_PROCEDURE() –ERROR_LINE() –ERROR_MESSAGE()

DBI026 -DB Aplikace - MFF UK 26 Výjimky – T-SQL BEGIN TRY příkaz END TRY BEGIN CATCH příkaz END CATCH Zachyceny nejsou –Varování s ERROR_SEVERITY<=10 –Chyby s ERROR_SEVERITY>20 pokud zastavují vykonávání pro session O úroveň výše zachyceny –Kompilační chyby

DBI026 -DB Aplikace - MFF UK 27 Výjimky – T-SQL BEGIN TRY SELECT 1/0; -- zero divide … END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure, ERROR_LINE() AS ErrorLine, ERROR_MESSAGE() AS ErrorMessage; END CATCH; GO

DBI026 -DB Aplikace - MFF UK 28 Uživatelské aplikační výjimky Generování –RAISERROR({ msg_id -- číslo výjimky, >= | msg_str -- text výjimky -- text výjimky v proměnné }, severity, state, argument [, …]) Jednotlivé zprávy lze předpřipravit pomocí sp_addmessage a poté se odkazovat jen pomocí msg_id msg_str může obsahovat odkazy na parametry, podobně jako C-funkce printf, hodnoty předány v argumentech Severity je závažnost chyby pouze skup. sysadmin