Embedded SQL v C/C++ III - pole, struktury. Jindřich Vodrážka

Podobné dokumenty
Embedded SQL v C/C++ úvod. Administrace Oracle Kateřina Opočenská

Zápisování dat do databáze

Embedded SQL. Tomáš Skalický. Říjen 2010

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Embedded SQL Dotazovací Jazyky I. Bc. CHOMUT Miroslav Bc. VODOLÁN Miroslav

10. Architektura klient/server a třívrstvá architektura

10. Architektura klient/server a třívrstvá architektura

Virtual Private Database (VPD) Jaroslav Kotrč

Text úlohy. Systémový katalog (DICTIONARY):

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

Uložené procedury Úvod ulehčit správu zabezpečení rychleji

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

Databázové systémy, MS Access. Autor: Ing. Jan Nožička SOŠ a SOU Česká Lípa VY_32_INOVACE_1130_Databázové systémy, MS Access_PWP

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

KIV/ZIS cvičení 6. Tomáš Potužák

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

Jazyk PL/SQL Úvod, blok

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Databázové systémy. Cvičení 6: SQL

Operátory ROLLUP a CUBE

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Databáze I. Přednáška 9

Databázové a informační systémy Jana Šarmanová

4. lekce Přístup k databázi z vyššího programovacího jazyka

Lekce 6 - Správa prostorových dat

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Distanční opora předmětu: Databázové systémy Tématický blok č. 8: Transact SQL Autor: RNDr. Jan Lánský, Ph.D.

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Odvozené a strukturované typy dat

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

POSTUP PRO VYTVOŘENÍ STRUKTUR PRO UKLÁDÁNÍ RDF DAT V ORACLE

PG 9.5 novinky ve vývoji aplikací

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

SQL - trigger, Databázové modelování

Kapitola 4: SQL. Základní struktura

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

Databáze I. Přednáška 4

Embedded C výjimky, kurzory. Šárka Hlušičková

Sada 1 - PHP. 14. Úvod do jazyka SQL

17. července :51 z moravec@yahoo.com

Zpracování informací

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

5. POČÍTAČOVÉ CVIČENÍ

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

Osnova je orientační pro FIT, u FEKTu se dá předpokládat, že budou zohledněny předchozí znalosti studentů, kde většina s databází nikdy přímo

Verzování a publikace dat na webu za pomoci PostgreSQL

Spojová implementace lineárních datových struktur

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná

RNDr. Michal Kopecký, Ph.D. Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Databáze 2011/2012 T-SQL - kurzory, funkce. RNDr.David Hoksza, Ph.D.

Databázové systémy a SQL

Tabulka fotbalové ligy

Databázové systémy I

Optimalizace dotazů a databázové transakce v Oracle

8.2 Používání a tvorba databází

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

Michal Krátký, Miroslav Beneš

Databázové systémy Cvičení 5

Databáze I. 5. přednáška. Helena Palovská

Ukládání a vyhledávání XML dat

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

Oracle XML DB. Tomáš Nykodým

Databáze II. 1. přednáška. Helena Palovská

Základy informatiky. 06 Databázové systémy. Kačmařík/Szturcová/Děrgel/Rapant

Databázové systémy Cvičení 5.2

Co se stane po jeho vykonání? Vyberte libovolný počet možných odpovědí. Správná nemusí být žádná, ale také mohou být správné všechny.

Databázové systémy úvod

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Použití databází na Webu

DJ2 rekurze v SQL. slajdy k přednášce NDBI001. Jaroslav Pokorný

Jazyk SQL databáze SQLite. připravil ing. petr polách

Informační systémy 2008/2009. Radim Farana. Obsah. Skripty a dávky. Nastavení aktuální databáze. USE DatabaseName

Marian Kamenický. Syntea software group a.s. marian.kamenicky. MFFUK Praha 2012/13

Stručný obsah. část III Aktualizace dat Kapitola 10: Aktualizace databáze 257 Kapitola 11: Integrita dat 275 Kapitola 12: Zpracování transakcí 307

Databázové systémy I. 1. přednáška

Maturitní otázky z předmětu PROGRAMOVÁNÍ

6. blok část B Vnořené dotazy

DATABÁZOVÉ A INFORMAČNÍ SYSTÉMY

Databáze I. 1. přednáška. Helena Palovská

NÁVRH A TVORBA HUDEBNÍ DATABÁZE

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Databáze I. Přednáška 7

Virtuální privátní databáze

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

Databázové a informační systémy. Dokumentace k projektu. Učební sklad

Kritéria hodnocení praktické maturitní zkoušky z databázových systémů

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

MySQL sežere vaše data

Abstraktní datové typy Objektový přístup v Oracle

Vkládání, aktualizace, mazání

KMI / TMA Tvorba mobilních aplikací. 6. seminář ZS 2016/2017 Středa 13:15-15:45

Deklarativní IO shrnutí minulé přednášky

Transkript:

Embedded SQL v C/C++ III - pole, struktury Jindřich Vodrážka

Obsah referátu Motivace k použití polí v emb. SQL Deklarace Host Arrays Použití polí v jednoduchých dotazech Použití polí ve složitějších dotazech Omezení při použití polí Struktury v emb. SQL Deklarace Host Structures Příklad použití struktur v SQL dotazech Multi-row & Multi-column operace

Motivace for(i=0; i< MAX; ++i) { EXEC SQL... } for(i=0; i< MAX; ++i) { /* naplneni pole */ } EXEC SQL... zjednodušení kódu programu redukce času spotřebovaného na komunikaci mezi klientským programem a serverem masová manipulace s daty

Deklarace Host Arrays EXEC MYSQL BEGIN DECLARE SECTION; VARCHAR names[20][21]; int salaries[20]; int ids[10]; /*(1) ERROR */ int matrix[10][10]; /*(2) ERROR */ EXEC MYSQL END DECLARE SECTION; (1) v jednom SQL dotazu nelze použít pole různých velikostí (2) s výjimkou typu char nelze deklarovat vícedimenzionální pole

Použití v jednoduchých dotazech int maxid; /* maximalni id z tabulky employees */ /* zaplneni poli */ int i; for(i=0; i<10; ++i) { printf("zadejte jmeno:\n"); /* zde pro jednoduchost predpokladejme korektni vstup */ gets(names[i].arr); names[i].len = strlen(names[i].arr); ids[i]=maxid+i; } /* vkladani poli */ EXEC SQL INSERT INTO employees (id,name) VALUES(:ids,:names); EXEC SQL COMMIT WORK RELEASE;

Použití v jednoduchých dotazech... /* zaplneni pozdeji vyuzitych poli */ /* priklad pro UPDATE */ EXEC SQL UPDATE employees SET salary = :salaries WHERE id = :ids; /* priklad pro DELETE */ EXEC SQL DELETE FROM employees WHERE id = :ids; /* obdobne pro SELECT pri znamem poctu vracenych radku */ počet změněných řádků při UPDATE a DELETE může být větší než velikost pole

Použití ve složitějších dotazech počet zpracovaných záznamů po provedení SQL dotazu uchovává proměnná sqlca.sqlerrd[2] počet položek pole ke zpracování lze ovlivnit pomocí klauzule FOR při naplnění pole pomocí klauzule SELECT nebo FETCH je třeba použít pole indikátorových proměnných k testování navrácených hodnot

Použití sqlca.sqlerrd[2] /* pomocne promenne pro kontrolu cyklu */ int rows_this_time = ARRAY_SIZE; int rows_before = 0; int i; while(array_size == rows_this_time) { EXEC SQL FETCH cur INTO :names:ind_names, :salaries:ind_salaries; /* update pomocnych promennych */ rows_this_time = sqlca.sqlerrd[2] rows_before; rows_before = sqlca.sqlerrd[2]; } /* zpracovani dat nactenych do pole */...

Použití klauzule FOR... VARCHAR names[array_size][namelen]; int salaries[array_size]; EXEC SQL END DECLARE SECTION; /* pripojeni k databazi */ /* naplneni pole (filled_rows oznacuje pocet doopravdy naplnenych polozek */ EXEC SQL FOR :filled_rows INSERT INTO employees (name,salary) VALUES (:names,:salaries); /* bylo vlozeno prvnich filled_rows polozek pole */...

Omezení při použití polí v dotazech s klauzulemi VALUES, SET, INTO nebo WHERE nelze zároveň použít pole a skalární proměnné při INSERTu nelze použít pole pointerů; v klauzuli VALUES musí být datové položky v dotazu na SELECT nelze použít pole v klauzuli WHERE (s výjimkou poddotazů)

Struktury v emb. SQL v SQL dotazech lze používat jako proměnné celé struktury strukturu lze sestavit pouze z proměnných použitelných jako host variable (i pole) nelze používat vnořené struktury předem deklarovanou strukturu lze použít v klauzuli INTO při dotazech SELECT nebo FETCH a v sekci VALUES při dotazu INSERT nelze použít s PL/SQL

Deklarace Host Structures typedef struct empl{ int id; VARCHAR name[20]; int salary; } emp_record; EXEC SQL BEGIN DECLARE SECTION; emp_record employee;... EXEC SQL END DECLARE SECTION; na pořadí proměnných uvnitř struktury záleží v kontextu dotazu

Příklad použití struktur /* naplneni struktury employee */... EXEC SQL INSERT INTO employees (id,name,salary) VALUES(:employee); /* dotaz by neprosel pri nasledujici deklaraci: */ typedef struct { int id; int salary; VARCHAR name[20]; } emp_record; proměnné musí "matchovat" na SQL dotaz

Multi-row & Multi-column operace použití polí umožňuje pracovat s jedním sloupcem na mnoha řádcích použití struktur umožňuje práci s mnoha sloupci jednoho řádku tyto dva přístupy lze při dodržení jistých pravidel kombinovat Multi-row & Multi-column operace

Multioperace dva přístupy struktura obsahující pole pole struktur struct empl { int ids[array_size]; VARCHAR names[array_size][20]; int salaries[array_size]; } multiempl; /* prislusna struktura indikatoru */ struct ind_empl { short ind_ids[array_size]; short ind_names[array_size]; short ind_sals[array_size]; } ind_multiempl; struct empl { int id; VARCHAR name[20]; int salary; } employees[array_size]; /* prislusne pole ind. struktur */ struct ind_empl { short ind_id; short ind_name; short ind_salary; } ind_employees[array_size];

Pole jako součást struktury /* naplneni struktury multiempl */ EXEC SQL INSERT INTO employees (id, name, salary) VALUES (:multiempl INDICATOR :ind_multiempl); řídí se stejnýmy pravidly jako práce s host arrays pouze "zabaleno" do struktury je vhodnější používat pole struktur

Deklarace Array of struct - omezení struct department { /* je nutne uvest structure tag */ int employees[20]; /* (1) ERROR */ char empl_name[20][20]; /* (2) ERROR */ struct salary{ /* (3) ERROR */ int month; int hour; } salary; } deparments[10]; /* pole 10 oddeleni */ (1) s výjimkou typů char a VARCHAR nelze deklarovat pole uvnitř struktury (2) pole typů char a VARCHAR nesmí být vícedimenzionální (3) členem struktury nesmí být struktura

Použití Array of struct /* deklarace */ struct empl { int id; VARCHAR name[namelen]; int salary; } empls[array_size]; /* naplneni */ for(i=0; i < ARRAY_SIZE; ++i) {... } /* pouziti v SQL dotazu */ EXEC SQL INSERT INTO employees (id, name, salary) VALUES(:empls);

Omezení Array of struct nelze použít v klauzulích WHERE a FROM nelze použít v klauzuli SET uvnitř UPDATE dotazu pole struktur nejsou povoleny v blocích PL/SQL pole struktur nejsou povoleny v Oracle Dynamic SQL Method 4