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

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

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

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

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

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

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

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

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

Jazyk PL/SQL Úvod, blok

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

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

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

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

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

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

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

PROGRAMOVÁNÍ V C++ CVIČENÍ

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

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

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

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

Databázové systémy úvod

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

MySQLi (objektově) Příklad vytvoření instance třídy včetně parametrů pro připojení: $mysqli = new mysqli('localhost', 'login', 'heslo', 'databaze');

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

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

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

Popis souboru pro generování reportů *.report

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

6. SQL složitější dotazy, QBE

Audit DB. Referát. Vypracoval: Zdeněk Doležal MFF UK Praha 11/5/06

Zápisování dat do databáze

Administrace Oracle. Jan Šaršon. Audit databáze

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

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Algoritmizace a programování

FIREBIRD relační databázový systém. Tomáš Svoboda

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

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

Semestrální práce z DAS2 a WWW

Administrace Oracle - Správa zdrojů

Semináˇr Java X JDBC Semináˇr Java X p.1/25

Oracle Call Interface (OCI)

Zápis programu v jazyce C#

Administrace Oracle. Práva a role, audit

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

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

PRŮBĚHOVÝ TEST Z PŘEDNÁŠEK

PHP a Large Objecty v PostgreSQL

Administrace Oracle Práva a role, audit. Kukhar Maria

IUJCE 07/08 Přednáška č. 1

Kapitola 4: SQL. Základní struktura

Úvod do databázových systémů

řízení transakcí 2-3 hodiny

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Transakce a zamykání. Administrace MS SQL Serveru (NDBI039) Pavel Hryzlík

NPRG031 Programování II --- 2/2 Z, Zk

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

IBM DB2 Universal Database. Přehled zpráv, díl 2. verze 7 GC

Střední odborná škola a Střední odborné učiliště, Hořovice

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

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

8 Třídy, objekty, metody, předávání argumentů metod

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

Databázové systémy I

Databázové systémy a SQL

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Programování v C++ 1, 1. cvičení

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

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

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

Prezentace a vysvětlení programového prostředí NXC

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

Programování v Pythonu

Reprezentace dat v informačních systémech. Jaroslav Šmarda

Výrazy, operace, příkazy

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

Odvozené a strukturované typy dat

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

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

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

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

Virtual private database. Antonín Steinhauser

Operátory ROLLUP a CUBE

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

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

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

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

Úvod do programovacích jazyků (Java)

PG 9.5 novinky ve vývoji aplikací

Programovací jazyk Pascal

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Rezervační systém Tvorba WWW stránek

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Opakování programování

Transkript:

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

Motivace potřeba začlenit komunikaci s databází do aplikace v nějakém vyšším programovacím jazyce řešení (na Oracle): a) OCI (Oracle Call Interface) přímý přístup k funkcím, rychlejší, ale programátorsky náročnější b) Embedded SQL přehlednější, uživatel odstaven od znalostí API daného SQL serveru

Embedded SQL Tento referát je o Embedded SQL pro C/C++ SQL lze ale na Oracle začlenovat i do jiných jazyků (např. Cobol, Fortran)

Jak to funguje Do zdrojového kódu v C/C++ píšeme speciálně uvozené SQL příkazy soubor.pc Prekompilátor Pro*C/C++ (proc) tyto dotazy nahradí voláním funkcí standardní run-time knihovny (SQLLIB) a převede soubor.ps do čistého C/C++. soubor.c Dále se už kód překládá jako obyčejný céčkový zdroják. Na konci se k němu přilinkuje SQLLIB soubor.obj, spustitelný program

Syntaxe Pro*C Základní pravidla pro psaní SQL příkazů do C-kódu: 1) všechny SQL příkazy jsou uvozeny direktivou EXEC SQL a končí středníkem ; 2) při použití proměnných v SQL příkazech musí být tyto proměnné uvozeny dvojtečkou : (odlišení od databázových polí), v C-kódu se píší normálně

Příklad: základní syntaxe Pro*C SELECT INTO FROM EXEC SQL BEGIN DECLARE SECTION; int plat_sefa; EXEC SQL END DECLARE SECTION; /*... */ EXEC SQL SELECT plat INTO :plat_sefa FROM Zamestnanci WHERE id_zam = 123; /*... */ printf("sefuv plat: %d\n", plat_sefa); /*... */

Příklad: základní syntaxe Pro*C INSERT INTO VALUES typedef struct { int id; char name[20]; }rec; EXEC SQL BEGIN DECLARE SECTION; Myrec rec; EXEC SQL END DECLARE SECTION; Myrec.id=5; strcpy(myrec.name,"user5"); EXEC SQL INSERT INTO Lide VALUES (:Myrec);

Deklarativní část všechny deklarace mezi EXEC SQL BEGIN DECLARE SECTION; a EXEC SQL END DECLARE SECTION; určují, jaké proměnné se budou používat pro komunikaci mezi programem a databází (načítání dat i zápis, indikátory) těmto proměnným se také říká hostitelské proměnné (host variables)

Typy hostitelských proměnných char, int, short, long, float, double + pointery na ně, pole VARCHAR[n] pseudotyp pro stringy rozpoznávaný přímo prekompilátorem Pro*C/C++ v podstatě céčkový struct se 2 položkami: arr pole charů len délka pole

Implicitní konverze datových typů SQL VARCHAR DATE INTEGER NUMBER(P,S) CHAR(X) Pro*C/C++ VARCHAR[n], char VARCHAR[n], char[] int char, short, int, long, float, double, char[n], VARCHAR[n] char[n],varchar[n],int,short,long,float,doule

Příklad: spojení s databází EXEC SQL BEGIN DECLARE SECTION; char username[20]; char password[20]; EXEC SQL END DECLARE SECTION; strcpy(username, "uzivatel"); strcpy(password, "heslo"); EXEC SQL CONNECT :username IDENTIFIED BY :password; /* práce s databází */ EXEC SQL COMMIT WORK RELEASE; /* potvrzení změn, odpojení */

Spojení s databází - doplnění: Pouze ukončení transakce: EXEC SQL COMMIT; Storno změn: EXEC SQL ROLLBACK; Storno změn + odpojení: EXEC SQL ROLLBACK WORK RELEASE;

Připojení k databázi podrobněji Kompletní syntaxe CONNECTu: EXEC SQL CONNECT { :user IDENTIFIED BY :oldpswd :usr_psw } [[ AT { dbname :host_variable }] USING :connect_string ] [ {ALTER AUTHORIZATION :newpswd IN { SYSDBA SYSOPER } MODE} ] ;

Připojení k databázi Dvě ekvivalentní možnosti zápisu: EXEC SQL CONNECT :username IDENTIFIED BY :password; username a password jsou typu char[n],char* nebo VARCHAR[n] EXEC SQL CONNECT :usr_psw; usr_psw = "username/password "; Připojení k jiné databázi: EXEC SQL CONNECT USING db; db = semora ; Login a heslo nelze uvádět přímo! NE: EXEC SQL CONNECT "scott" IDENTIFIED BY "tiger";

Indikátorové proměnné #1 motivace: co uložit do proměnné, když SELECT vrátí NULL? řešení: indikátor, který ukáže, zda (a jak) je hostitelská proměnná korektně naplněna

Indikátorové proměnné #2 proměnné typu short deklarovány v deklarační sekci stejně jako hostitelské proměnné svázané vždy s jednou konkrétní hostitelskou proměnnou indikují, co je v hostitelské proměnné obsaženo za hodnotu (NULL flags, ořezání řetězce) v rámci SQL příkazů také uvozeny : následují vždy bezprostředně za příslušnou hostitelskou proměnnou (pro přehlednost lze oddělit klíčovým slovem INDICATOR)

Příklad: indikátorové proměnné EXEC SQL SELECT plat INTO :plat_sefa :plat_sefa_id FROM Zamestnanci WHERE id_zam = 123; /*... */ if (plat_sefa_id == 0){ printf("sefuv plat: %d\n", plat_sefa); }

Návratové hodnoty identifikátorů v SELECT INTO indikátor -1 0-2 >0 hostitelská proměnná nedefinovaná hodnota (NULL v databázi) korektní naplnění vkládaná hodnota je větší než proměnná a není možné určit skutečnou velikost vkládaná hodnota je větší než proměnná, skutečná velikost je hodnota indikátoru

Návratové hodnoty identifikátorů v INSERT/UPDATE indikátor -1 >=0 databáze uložena hodnota NULL uložena korektní hodnota

Základní ošetření chyb #1 EXEC SQL WHENEVER <cond> <action>; Kdykoliv je splněna podmínka <cond>, automaticky se vyvolá akce <action> příkazy se vzájemně překrývají #include <sqlca.h> Možné podmínky (a kdy jsou splněny): NOT FOUND kritériům SELECT/FETCH neodovídá žádná položka SQLERROR nějaký příkaz SQL EXEC skončil chybou SQLWARNING nějaký příkaz SQL EXEC skončil s varováním

Základní ošetření chyb #2 Možné akce: CONTINUE DO <stmt> GOTO <label> STOP pokud lze, pokusí se program pokračovat dalším příkazem vykoná se příkaz <stmt>, typicky volání fce / exit skok na daný label volání exit(), ukončení programu, nepotvrzené akce jsou stornovány (rollback)

Příklad: ošetření chyb při připojování k databázi: EXEC SQL WHENEVER SQLERROR DO sql_error( Nelze se pripojit ); SELECTy v cyklu (pomocí kurzoru): EXEC SQL WHENEVER NOT FOUND DO break;

Více o Oracle Pro*C/C++ Pro*C/C++ Programmer's Guide http://mates.ms.mff.cuni.cz/intra/oracle/doc/ora804nt/appdev.804 /a58233/toc.htm Introduction to Pro*C Embedded SQL http://www-db.stanford.edu/~ullman/fcdb/oracle/or-proc.html Embedded SQL FAQ https://www1.columbia.edu/sec/acis/dba/oracle/faq-esql.html Oracle Precompiler FAQ http://www.orafaq.com/faqpro.htm