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ů.

Slides:



Advertisements
Podobné prezentace
Databázové systémy 2 Cvičení č. 8
Advertisements

Základy jazyka SQL Jan Tichava
SQL: DDL v ORACLE CREATE TABLE jméno_tabulky (atribut datový_typ [DEFAULT][attribut_constraint] [, atribut datový_typ [DEFAULT] [attribut_constraint]],...
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.
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é.
 Informací se data a vztahy mezi nimi stávají vhodnou interpretací pro uživatele, která odhaluje uspořádání, vztahy, tendence a trendy  Existuje celá.
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.
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
Temporální databáze a TSQL
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.
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č.
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.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Databázové systémy II Přednáška č. 4, 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Execution plans Lubomír Andrle 6. přednáška
Architektura databází Ing. Dagmar Vítková. Centrální architektura V této architektuře jsou data i SŘBD v centrálním počítači. Tato architektura je typická.
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.
Vypracoval: Ondřej Dvorský Třída: VIII.A
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.
Principals, Securables, Schema Vít Ochozka. Entity databáze - zdroje Securables –Entity databáze (zdroje), ke kterým SQL reguluje přístup podle práv –Hierachie.
Databázové systémy I Cvičení č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
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.
Administrace Oracle Práva a role, audit Filip Řepka 2010.
Ing. Tomáš Váňa, Ing. Jiří Zechmeister
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
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro vstup a výstup 12 Verze
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Návrh a tvorba WWW Cvičení 5
Databázové systémy II Přednáška č. 9. Transakce je logická jednotka práce sestávající z jednoho nebo více SQL příkazů, které jsou atomické z hlediska.
Transakční zpracování v SQL P. Částek. Transakce Transakce = logická jednotka práce Podaří-li se všechny části transakce, potvrdíme je. COMMIT Jestliže.
Databázové systémy I Cvičení č. 10 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Analýza infromačního systému. Matice afinity ISUD matice – Insert (vkládání dat) – Select (výběr dat) – Update (aktualizace dat) – Delete (vymazání dat)
Informatika II PAA DOTAZOVACÍ JAZYKY
Aplikační a programové vybavení
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é systémy 2 Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové Aplikace Slidy ke cvičení DBI026, část 3 KSI MFF UK Verze
Vnořené SQL (embedded SQL) Dotazovací jazyky I
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Administrace Oracle Paralelní zpracování.
Zanořené SQL a dynamické SQL
Dynamické SQL (dynamic SQL)‏ Dotazovací jazyky Šárka Hlušičková.
1 Syntaxe a sémantika aktivních databází Databázové triggery Aktivní pravidla 10. listopadu 2004 Zuzana Reitermanová & Vojtěch Hlaveš.
Dynamická webová aplikace Autor:Ondřej Soukup Třída:I3.
Autor, Název akce Databázové systémy a SQL Lekce 7 Daniel Klimeš.
Databázové systémy a SQL
Roman Danel Institut ekonomiky a systémů řízení 2016
Dotazovací jazyk SQL - III
Databázové systémy a SQL
Databázové systémy I Přednáška 11 Databázové systémy 1 – KIT/IDAS1
Embedded SQL Vítězslav Imrýšek.
Databázové systémy a SQL
Databázové systémy a SQL
Šablona 32 VY_32_INOVACE_038.ICT.34
Databázové systémy a SQL
Přednáška 9 Triggery.
Transkript prezentace:

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ů Dynamic SQL je rozšíření jazyka Embedded SQL o dynamický (online) přístup Kde je možno Dynamic SQL využít? SQL klient a aplikace využívající tohoto principu

Princip … … Dynamic SQL 1.Získá řetězec reprezentující SQL příkaz a připraví ho k dynamickému spuštění 2.Spustí připravený příkaz 3.Získá výsledek a vrátí jej uživateli … SQL klienta 1.Přijme a provede analýzu příkazu z terminálu 2.Vykoná příslušný SQL příkaz 3.Vrátí uživateli výsledek

Princip … 1.char * retezec = “DELETE FROM zbozi WHERE name=‘hruska’ ”; EXEC SQL DECLARE prikaz STATEMENT; EXEC SQL PREPARE prikaz FROM :retezec; 2.EXEC SQL EXECUTE prikaz; 3.printf(“%s”,(SQLCODE == 0 ? “Success” ; “Error” )); … Dynamic SQL 1.Získá řetězec reprezentující SQL příkaz a připraví ho k dynamickému spuštění 2.Spustí připravený příkaz 3.Získá výsledek a vrátí jej uživateli

Příklad EXEC SQL BEGIN DECLARE SECTION ; char * retezec = “DELETE FROM zbozi WHERE name=‘hruska’ ”; EXEC SQL END DECLARE SECTION ; EXEC SQL DECLARE prikaz STATEMENT; EXEC SQL PREPARE prikaz FROM :retezec; EXEC SQL EXECUTE prikaz; retezec je proměnná jazyka C, proto je v Embedded SQL používána s dvojtečkou prikaz je proměnná jazyka SQL, proto není v Embedded SQL používána s dvojtečkou

PREPARE Syntax: EXEC SQL PREPARE statement FROM string ; Jaké příkazy můžeme „připravit“ pro dynamické spuštění? –DDL CREATE, ALTER, DROP –DML INSERT, UPDATE*, DELETE*, SELECT** –DCL GRANT, REVOKE –Transakční zpracování COMMIT, ROLLBACK, LOCK –Další COMMENT, LABEL, EXPLAIN *)UPDATE a DELETE smí být zadány i ve formě CURRENT **)SELECT nesmí být zadán ve formě INTO

PREPARE Jaké příkazy nemůžeme „připravit“? –příkazy Embedded SQL pro řízení: EXEC SQL, INCLUDE, WHENEVER –příkazy Embedded SQL pro práci s kurzory: DECLARE CURSOR, OPEN, FETCH, CLOSE –příkazy Dynamic SQL: DECLARE STATEMENT, PREPARE, EXECUTE, DESCRIBE –připravovaný příkaz dále nesmí obsahovat středník ani hostitelskou proměnnou: retezec = “DELETE FROM zbozi WHERE name=:jmeno ; “; sprintf(retezec, “DELETE FROM zbozi WHERE name=‘%s’ ”, jmeno);

EXECUTE Syntax: EXEC SQL EXECUTE prikaz [ USING parametry ] ; Příklad EXECUTE USING: jmeno = “hruska” ; retezec = “DELETE FROM zbozi WHERE name=? ”; EXEC SQL PREPARE prikaz FROM :retezec ; EXEC SQL EXECUTE prikaz USING :jmeno ; –ekvivalentní: jmeno = “hruska” ; sprintf(retezec, “DELETE FROM zbozi WHERE name=‘%s’ ”, jmeno); EXEC SQL PREPARE prikaz FROM :retezec ; EXEC SQL EXECUTE prikaz ;

EXECUTE IMMEDIATE Syntax: EXEC SQL EXECUTE IMMEDIATE { :hostitelská_proměnná | řetězcová_proměnná }; EXECUTE IMMEDIATE je podporován jen v některých implementacích. Nesmí nic vracet ani mít nějaké parametry. Umožňuje vynechat sekce DECLARE STATEMENT a PREPARE: EXEC SQL EXECUTE IMMEDIATE :retezec ; nebo EXEC SQL EXECUTE IMMEDIATE ‘DELETE FROM zbozi’;

SELECT EXEC SQL BEGIN DECLARE SECTION ; char * retezec = “SELECT name, stuff_count FROM zbozi “; char name_[20]; int count_; EXEC SQL END DECLARE SECTION ; EXEC SQL DECLARE prikaz STATEMENT ; EXEC SQL PREPARE prikaz FROM :retezec ; EXEC SQL DECLARE kurzor CURSOR FOR prikaz ; EXEC SQL OPEN kurzor ; EXEC SQL WHENEVER NOT FOUND DO break; for (;;) { EXEC SQL FETCH kurzor INTO :name_, :count_ ; printf(“Name: %s, Count: %d \n”, name_, count_); }

SELECT EXEC SQL BEGIN DECLARE SECTION ; char * retezec = “SELECT name, stuff_count FROM zbozi WHERE name=? “; char name_[20]; int count_; EXEC SQL END DECLARE SECTION ; EXEC SQL DECLARE prikaz STATEMENT ; EXEC SQL PREPARE prikaz FROM :retezec ; EXEC SQL DECLARE kurzor CURSOR FOR prikaz ; EXEC SQL OPEN kurzor USING :jmeno; EXEC SQL WHENEVER NOT FOUND DO break; for (;;) { EXEC SQL FETCH kurzor INTO :name_, :count_ ; printf(“Name: %s, Count: %d \n”, name_, count_); }

SELECT EXEC SQL BEGIN DECLARE SECTION ; char * retezec = “SELECT name, stuff_count FROM zbozi WHERE name=? “; char name_[20]; int count_; EXEC SQL END DECLARE SECTION ; EXEC SQL DECLARE prikaz STATEMENT ; EXEC SQL PREPARE prikaz FROM :retezec ; EXEC SQL DECLARE kurzor CURSOR FOR prikaz ; EXEC SQL OPEN kurzor USING :jmeno; EXEC SQL WHENEVER NOT FOUND DO break; for (;;) { EXEC SQL FETCH kurzor INTO :name_, :count_ ; printf(“Name: %s, Count: %d \n”, name_, count_); } Co když dopředu nevíme, jak bude vypadat výstup dotazu SELECT?!

DESCRIBE Dynamicky popíše výstup (a vstup) příkazu SELECT Syntax: –DB/2 EXEC SQL DESCRIBE prikaz INTO sqlda ; –Pro*C/C++ EXEC SQL DESCRIBE BIND VARIABLES FOR prikaz INTO bind_deskriptor ; EXEC SQL DESCRIBE SELECT LIST FOR prikaz INTO select_deskriptor ; SQLDA = SQL Descriptor Area = struktura popisující formát výstupu (v ProC i vstupu) SELECTu Bind a select deskriptory jsou v jazyku ProC dva druhy SQLDA –Bind deskriptor popisuje vstupní parametry příkazu SELECT. –Select deskriptor popisuje výstupní sloupečky příkazu SELECT.

#include... /* alokace select deskriptoru */ char * retezec = “SELECT name, stuff_count FROM zbozi “; EXEC SQL DECLARE prikaz STATEMENT ; EXEC SQL PREPARE prikaz FROM :retezec ; EXEC SQL DESCRIBE SELECT LIST FOR prikaz INTO select_descriptor ; … /* Programátor nyní musí za pomoci dat ve struktuře select_descriptor naalokovat prostor pro uschování výsledků ze SELECTu. Odkaz na tento prostor musí uschovat také v select deskriptoru. */ EXEC SQL DECLARE kurzor CURSOR FOR prikaz ; EXEC SQL OPEN kurzor ; EXEC SQL WHENEVER NOT FOUND DO break; for (;;) { EXEC SQL FETCH kurzor INTO select_descriptor ; … /* Výpis výsledku */ } DESCRIBE

#include... /* alokace select deskriptoru */ /* alokace bind deskriptoru */ char * retezec = “SELECT name, stuff_count FROM zbozi WHERE name=?”; EXEC SQL DECLARE prikaz STATEMENT ; EXEC SQL PREPARE prikaz FROM :retezec ; EXEC SQL DESCRIBE SELECT LIST FOR prikaz INTO select_descriptor ; … /* alokace prostoru pro výstupní proměnné */ EXEC SQL DESCRIBE BIND VARIABLES FOR prikaz INTO bind_deskriptor ; … /* alokace prostoru pro vstupní proměnné */ EXEC SQL DECLARE kurzor CURSOR FOR prikaz ; EXEC SQL OPEN kurzor USING bind_descriptor ; EXEC SQL WHENEVER NOT FOUND DO break; for (;;) { EXEC SQL FETCH kurzor INTO select_descriptor ; … /* Výpis výsledku */ } DESCRIBE

Literatura Pro*C/C++ Precompiler Programmer’s Guide (na –Chapter 13: Oracle Dynamic SQL (principy, příkazy, příklady) –Chapter 15: Oracle Dynamic SQL: Method 4 (SQLDA, deskriptory, funkční příklad)