Oracle Call Interface



Podobné dokumenty
Oracle Call Interface (OCI)

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

Soubory a databáze. Soubor označuje množinu dat, která jsou kompletní k určitému zpracování a popisují vybrané vlastnosti reálných objektů

Dálkové p enosy ze za ízení aktivní protikorozní ochrany Severomoravské plynárenské, a.s.

Team Engineering. New in V13. TIA Portal news. Restricted / Siemens AG All Rights Reserved.

Kapitola 1: Úvod. Systém pro správu databáze (Database Management Systém DBMS) Účel databázových systémů

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

Odpov di na dotazy k ve ejné zakázce. 30/ SSZ Registr IKP

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

Databázové systémy úvod

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Úvod, terminologie. Ing. Michal Valenta PhD. Databázové systémy BI-DBS ZS 2010/11, P edn. 1

Termíny zkoušek Komise Komise. subkomise 1 (obhaj.) :30 B subkomise 2 (obhaj.) :30 B8 120

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

Aplikace počítačů v provozu vozidel 9

Databázové a informační systémy

Databázové systémy úvod

PR VODCE NASTAVENÍM MODELU

Projekt je obvykle iniciován z d vodu dodržení sou asné i budoucí úrovn výroby,

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

Maturitní témata z předmětu Programování a databázové systémy. pro šk. rok 2012/2013

Radek Krej í. NETCONF a YANG NETCONF. 29. listopadu 2014 Praha, IT 14.2

Odpov di na dotazy uchaze k ve ejné zakázce. 25/

Virtual Private Database (VPD) Jaroslav Kotrč

Zám r a cíle projektu

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

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

Stru ný obsah. Úvod do Microsoft.NET Kapitola 1: Vývoj her a ízený kód...15

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

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

4IT218 Databáze. 4IT218 Databáze

Základní stavební prvky algoritmu

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

Oracle XML DB. Tomáš Nykodým

Dotazování nad stromem abstraktní syntaxe

Java a Caché IV: Manipulace s objekty

Administrace Oracle. Práva a role, audit

Struktura programu v době běhu

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

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

Použití databází na Webu

Inovované řešení VDT/VT

4.3 Operace nad ordin ln mi datov mi typy Operace nad logick m datov m typem Operace nad celo seln mi datov mi typy

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

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

Databázové systémy trocha teorie

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

FINAN NÍ ÍZENÍ A ROZHODOVÁNÍ PODNIKU

účetních informací státu při přenosu účetního záznamu,

2. přednáška. Databázový přístup k datům (SŘBD) Možnost počítání v dekadické aritmetice - potřeba přesných výpočtů, např.

Digital Signage Informa ní systém pro centrální ízení a správu obsahu digitálních billboard ON-LINE

PRACOVNÍ MATERIÁLY PRACOVNÍ MATERIÁLY CHEMIE CHEMIE. Struktura vyu ovací hodiny. Záznamový Záznamový arch. P edm tový metodik: Ing.

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

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

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

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

Data v počítači EIS MIS TPS. Informační systémy 2. Spojení: jan.skrbek@tul.cz tel.: Konzultace: úterý

Programování - úvod. Programování. Proces programování. Vlastnosti dobrého programu: Kapitola seznamuje se základními pojmy programování.

2C Tisk-ePROJEKTY

Jazyk S Q L základy, příkazy pro práci s daty

TÉMATICKÝ OKRUH Softwarové inženýrství

-1- N á v r h ČÁST PRVNÍ OBECNÁ USTANOVENÍ. 1 Předmět úpravy

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

PB161 Programování v jazyce C++ Přednáška 7

PB161 Programování v jazyce C++ Přednáška 7

Algoritmizace a programování

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

ÚVOD DO GEOGRAFICKÝCH INFORMA NÍCH SYSTÉM

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

Server. Software serveru. Služby serveru

HLAVA III PODROBNOSTI O VEDENÍ ÚST EDNÍHO SEZNAMU OCHRANY P ÍRODY

Jednací ád výbor Zastupitelstva m styse erný D l

Informa ní bezpe nost I Management bezpe nosti informa ních systém - ISMS. michal.slama@opava.cz

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

Operace nad celými tabulkami

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

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

1. Programování proti rozhraní

Administrace Oracle - Správa zdrojů

Maturitní témata z předmětu PROGRAMOVÉ VYBAVENÍ pro šk. rok 2012/2013

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

Kapitola 1: Co je Delphi 19. Překlad projektu 23

ípadová studie a procesní ízení Lukáš Strnad 2012 ZÁPADO ESKÁ UNIVERZITA V PLZNI FAKULTA ELEKTROTECHNICKÁ KATEDRA TECHNOLOGIÍ A M ENÍ

Dodavatel poslední instance z pohledu operátora trhu

RELAČNÍ DATABÁZOVÉ SYSTÉMY

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

Modul informačního systému SPŠSE Liberec

Fyzické uložení dat a indexy

EFESSO. Uživatelský manuál

3D sou adnicový m icí stroj. Od vodn ní vymezení technických podmínek podle 156 odst. 1 písm. c) zákona. 137/2006 Sb.

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

3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java

průvodce správou, využitím a programováním

DUM 14 téma: Kreslení hydraulických schémat

29 Evidence smluv. Popis modulu. Záložka Evidence smluv

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

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

Struktura pamětí a procesů v DB Oracle. Radek Strnad

Semináˇr Java X J2EE Semináˇr Java X p.1/23

Transkript:

Jan Bilak 1

P ehled referátu Úvod Co to je OCI? Výhody a nevýhody Princip a trocha teorie Základy Informace pot ebné pro pochopení nejjednoduššího p íkladu Rozbor jednoduchého p íkladu 2

Úvod 3

Co to je? (dále jen OCI) je aplika ní rozhranní (API), které umož uje vytvá et aplikace v jazycích t etí generace, které komunikují se servery Oracle pomocí volání nativních procedur a funkcí a umož uje ídit všechny fáze provád ní SQL p íkaz. OCI podporuje datové typy, volací konvence, syntaxi i sémantiku mnoha jazyk nap. C, C++, COBOL, Fortran, PHP, Java,... 4

OCI poskytuje Zlepšený výkon a rozši itelnost aplikací, protože efektivn využívá systémovou pam a sí ovou konektivitu Konzistentní rozhranní pro dynamické relace a správu transakcí ve dvouvrstvé (klinet-server) i vícevrstvé architektu e N-vrstvou autentizaci (ov ení) Komplexní podporu vývoje aplikací, které používají objekty Oracle P ístup do externích databází Aplikace mohou obsloužit více uživatel a zpracovat více požadavk bez zvýšených nárok na HW 5

Princip OCI umož uje manipulovat s daty a schematy v Oracle databázi pomocí hostitelského programovacího jazyka (nap. C). OCI je knihovna, která umož uje p ístup do databáze, provád ní standardních operací v DB a získávání informací z DB. OCI se dodává ve form dynamické knihovny, která m že být linkována k aplikaci za chodu. Proto není nutné v aplikacích používat embed SQL i PL/SQL. 6

Princip Zdrojové soubory (nap. v C++) Kompilátor daného jazyka používají se b žné vývojové nástroje, není t eba žádný preprocesing podpora mnoha kompilátor Objektové soubory Knihovny OCI Linker Aplikace Oracle server 7

Výhody V tší možnosti optimalizace a detailn jšího návrhu aplikací Mnoho poskytovaných funkcí Umož ují rozd lit jeden krok v jiných prost edcích do ady díl ích na sebe navazujících Vysoký stupe kontroly b hu aplikace Kostra programu je v programovacím jazyce (nap. C++) a do ní jsou zasazeny volání funkcí OCI Pohodlí pro programátora Pracuje v prost edí, na které je zvyklý Lze užít standardní vývojové a ladící nástroje P ístup k metadat m Oracle serveru Podpora dynamického SQL 8

Výhody Podpora širokého spektra platforem knihovny jsou závislé na platform, ale tém nezávislé na programovacím jazyce Asynchonní zpracování (neblokující) ízení je vráceno z OCI funkce zp t, p i emž dále probíhá zpracování p íkazu je možné se dotázat, zda se p íkaz ješt provádí významné u dlouhotrvajících operací aplikace nevytuhne, ale dále informuje uživatele o stavu provád ní a reaguje na požadavky Podpora LOB a objektových datových typ na serveru Oracle 9

Nevýhody V tší nároky na znalosti programátora Mén p ehledný zdrojový kód Kód je závislý na Oraclu (není jej možné použít s jinými DB servery) 10

Princip P esný postup linkování knihoven OCI záleží na konkrétním systému. Na n kterých platformách je t eba p ilinkovat ješt další knihovny pro úsp šné slinkování aplikace. Podrobné informace k linkování na dané platform lze nalézt v dokumentaci Oracle. 11

ásti OCI OCI lze rozd lit na tyto ásti: API pro tvorbu rozši itelných vícevláknových aplikací, které umožní obsluhovat mnoho uživatel SQL funkce pro p ístup k DB, zpracování SQL p íkaz a manipulaci s objekty získanými z DB serveru Oracle Mapování datových typ a funkce pro manipulaci s atributy datových typ Oracle Funkce pro pln ní databáze daty (bez použití SQL) Funkce pro podporu externích procedur, umož ující zp tná volání z PL/SQL (do C) 12

(Ne)procedurálnost OCI kombinuje procedurální programování v jazycích jako nap. C++ s neprocedurálními ástmi v SQL Tato kombinace je velmi silná Umož uje jednoduchý p ístup k databázi Oracle zprost edí strukturovaného programovacího jazyka OCI podporuje všechny p íkazy SQL pro definici dat (DDL), manipulaci s daty (), dotazy, správu transakcí, které poskytuje server Oracle Je možné využít PL/SQL (procedurálního rozší ení SQL Oraclu) 13

Objekty OCI má nástroje pro práci s objektovými datovými typy a objekty. Objekt má podobu známou z jiných jazyk uživatelský datový typ abstrakce objektu reálného sv ta atributy metody Do OCI byla za azeny (mimo jiné) i: Podpora vykonávání SQL p íkaz pro manipulaci s objekty a schematy Možnost využití odkaz na objekty a instancí objekt jako vstupních prom nných SQL p íkaz i jako návratových hodnot SQL p íkaz Podpora popisu procedur a funkcí PL/SQL, které využívají objekty jako vstupní i návratové hodnoty 14

SQL p íkazy Jedním z hlavních úkol aplikací OCI je vykonávat p íkazy SQL. P íkazy SQL m žeme rozd lit do n kolika skupin, p i emž p íkazy z r zných skupin vyžadují r zný postup zpracování pomocí OCI. DDL (Data Definition Language) Kontrolní p íkazy (Control Statements) Správa transakcí (Transaction Control) Správa relací (Session Control) Správa systému (System Control) DML (Data Manipulation Language) Dotazy (mají odlišné zpracování od DML p íkaz ) PL/SQL Embedded SQL 15

P íkazy DDL DDL p íkazy spravují strukturu databáze Slouží nap. pro vytvá ení tabulek (CREATE TABLE) odstra ování tabulek (DROP TABLE) tvorbu objekt (CREATE TYPE) atd. 16

DML DML (Data Manipulation Language) mají na starost zm nu dat v tabulkách DB, nap. p idání nové ádky do tabulky zm na hodnoty atributu v existující ádce tabulky smazání ádky tabulky zam ení tabulky databáze zjišt ní plánu vykonání SQL p íkazu... DML p íkazy mohou vyžadovat p edání dat pomocí uživatelských (bind) prom nných: INSERT INTO person_tab(name) VALUES (:name) 17

Dotazy P estože vlastn pat í do DML p íkaz, vyžadují jiný postup zpracování v OCI. Všechny p íkazy za ínají slovem SELECT. Dotazy mohou vyžadovat p edání dat pomocí uživatelských (bind) prom nných: SELECT name FROM employees WHERE empno = :empnumber 18

PL/SQL PL/SQL je procedurální rozší ení SQL Oraclu. Zpracovávané úlohy mohou být složit jší, než u jednoduchých dotaz SQL i manipulace s daty pomocí SQL DML p íkaz. Umož uje slou it n kolik konstrukcí, které se pak vykonají jako jeden celek. Mezi tyto konstrukce pat í: Jeden i více SQL p íkaz Deklarace prom nných P i azovací p íkazy Procedurální ídící p íkazy (IF...THEN...ELSE, cykly) Zpracování výjimek 19

PL/SQL Bloky PL/SQL lze užít na: volání uložených procedur a funkcí zkombinování procedurálních ídících p íkaz s n kolika SQL p íkazy tak, že se to vše vykoná jako jeden p íkaz P ístup ke zvláštním možnostem PL/SQL jako nap. záznamy, tabulky, kurzorové cykly FOR, zpracování výjimek použití kurzorových prom nných p ístup a manipulaci s objekty na DB serveru Oracle 20

Embedded SQL OCI zachází s p íkazy SQL jako s textovými et zci, které p edává DB serveru ke zpracování. Oraclovské prekompilery umož ují p ímo za azovat SQL p íkazy do zdrojového kódu. V tom p ípad je ovšem prekompilace nezbytná. Je ovšem možné míchat použití OCI s použitím embedded SQL v jednom zdrojovém kódu, který je nutné potom provést prekompilaci. 21

Handly Všechny datové struktury používané OCI jsou zapouzd eny ve form nepr hledných interfac, kterým íkáme handly. Ukazatel na ást pam ti, která je alokovaná a spravovaná knihovnami OCI Využívají se p i volání v tšiny OCI funkcí jako parametry Uchovávají informace o spojení, session, transakcích, vzniklých chybových stavech apod. 22

Handly Klient si vyvá í (alokuje) handly voláním funkce OCIHandleAlloc(). P istupovat k dat m handlu lze pouze p es speciální funkce OCI, nikoli p ímo. Existuje mnoho typ handl a jsou hierarchicky uspo ádány. Výhody Použití handl umož uje m nit struktury OCI, aniž by bylo nutné m nit kód aplikace. Usnad ují programování starají se o n OCI knihovny. Redukují množství stavových informací na stran serveru ímž se snižuje pam ová náro nost serveru. 23

Autentifikace uživatel OCI poskytuje zjednodušené ov ování uživatel a správu hesel: Umož uje jedné OCI aplikaci ov ovat více uživatel. Umož uje aplikaci zm nit heslo uživatele, což se m že hodit nap. po obdržení zprávy o vypršení platnosti hesla p i pokusu o ov ení uživatele. OCI podporuje dva typy p ihlašovacích relací: Zjednodušenép ihlášení: je p ihlášen jeden uživatel použitím loginu a hesla. Nastavení, kdy je pro jednu aplikaci vytvo eno více login relací a je tedy možné aby aplikace podporovala více sou asn p ihlášených uživatel. 24

Základy použití 25

Základní struktura použití 1. Inicializace programového prost edí a proces OCI 2. Alokace pot ebných handl a datových struktur, navázání spojení se serverem a zahájení uživatelské relace (session) 3. Spušt ní SQL p íkaz (posílání SQL p íkaz serveru a p ípadné zpracování dat) 4. Op tovné spušt ní p ipravených p íkaz nebo p íprava nových a jejich spušt ní 5. Ukon ení uživatelské relace a uzav ení spojení se serverem 6. Uvoln ní nepot ebných handl 26

Paralelní zpracování Vytvo ení prost edí Vytvo ení prost edí Alokace handl a datových struktur P ipojení k serveru a za átek relace Spušt ní SQL p íkaz Alokace handl a datových struktur P ipojení k serveru a za átek relace Spušt ní SQL p íkaz Odpojení Uvoln ní handl a datových struktur Odpojení Uvoln ní handl a datových struktur 27

Hierarchie handl Session handle Direct Path Context Handle Thread Handle COR Handle Subscription Handle Environment handle Describe Handle Statement Handle Service Context Handle Error Handle Server Handle Connection Pool Handle 28

Environment Handle Definuje kontext, ve kterém jsou provád ny všechny ostatní OCI funkce Obsahuje vyrovnávací pam t (cache) Pokud více vláken sdílí jeden Environment handle, p ístupy k vyrovnávací pam ti jsou serializovány ( azeny za sebou). Vlána také mohou blokovat p ístup k vyrovnávací pam ti. Ostatní handly jsou potomci Environment handlu. 29

Error Handle Obsahuje informaci o vzniklých chybách Je parametrem mnoha OCI funkcí Alokace tohoto handlu je jeden z prvních krok aplikace Na vzniklé chyby je možné se dotázat funkcí OCIErrorGet() 30

Service Context Handle Service Context Handly definují atributy, které ur ují pracovní kontext OCI volání serveru. Obsahuje t i handly jako své atributy. Server Handle definuje spojení k databázi. User Session Handle definuje roli uživatele (práva) a pracovní kontext. Trasactional Handle definuje transakci, ve které jsou provád ny SQL p íkazy. Obsahuje stavové informace uživatelské relace. Service Context Handle atributy Server Handle User Session Handle Transaction Handle 31

Service Context Handle P ed použitím Service Context Handlu jej musím inicializovat funkcemi OCIHandleAlloc() nebo OCILogon(). OCILogon() provede jak alokaci, tak inicializaci. OCIHandleAlloc() provede pouze alokaci, inicializaci musíme provést spolu s Server Handlem, User Session Handlem a Transaction Handlem funkcí OCIAttrSet(). Jednoduchá aplikace, která má vždy v jednom okamžiku pouze pouze jednu uživatelskou relaci pro každé databázové spojení, bude typicky používat funkci OCILogon(). 32

Statement Handle Reprezentuje SQL nebo PL/SQL p íkaz a jeho p idružené vlastnosti Informace o vstupech a výstupech jsou uloženy v Bind Handlu OCI knihovna alokuje Bind Handle pro každou vstupní prom nnou definovanou funkcemi OCIBindByName() or OCIBindByPos(), proto uživatel Bind Handle nemusí alokovat. Statement Handle Define Handle Bind Handle 33

Statement Handle Data vrácená p íkazem SELECT jsou zkonvertována podle požadavk v Define Handlu. OCI alokuje Define Handle pro každou výstupní prom nnou definovanou funkcí OCIDefineByPos(). Uživatel se tedy op t nemusí o alokaci Define Handl starat. Bind i Define Handle jsou uvoln né, pokud je uvoln ný Statement Handle nebo je p ipraven nový p íkaz na dané, Statement Handlu 34

Ukázkový p íklad (OCI 8) 35

Knihovny /* standardní C knihovny */ #include <stdio.h> #include <stdlib.h> #include <string.h> /* OCI knihovna */ #include <oci.h> /* umíst ní knihovny */ #pragma comment(lib, "d:\\orant\\oci80\\lib\\msvc\\ora803.lib" ) 36

Deklarace handl /* deklarace jednotlivých handl */ static OCIEnv *p_env; /* Environment */ static OCIError *p_err; /* Error */ static OCISvcCtx *p_svc; /* Service Context */ static OCIStmt *p_sql; /* Statement */ static OCIDefine *p_dfn /* Define */ = (OCIDefine *) 0; static OCIBind *p_bnd /* Bind */ = (OCIBind *) 0; 37

main() a prom nné void main() { /* deklarace prom nných */ int p_bvi; /* hodnota parametru */ char p_sli[20]; /* buffer pro výstupní hodnotu dotazu*/ int rc; /* návratový kód */ char errbuf[100]; /* buffer pro text chyby*/ int errcode; /* íslo chyby */ 38

Ïnicializace OCI /* Inicializace OCI */ rc = OCIInitialize( (ub4) OCI_DEFAULT, (dvoid *)0, (dvoid * (*)(dvoid *, size_t)) 0, (dvoid * (*)(dvoid *, dvoid *, size_t))0, (void (*)(dvoid *, dvoid *)) 0 ); /* Parametry lze ovlivnit r zné nastavení, nap. zajistit schopnost pracovat korektn ve více vláknech, zajistit používání vlastních funkcí pro správu pam ti,...*/ 39

Inicializace prost edí /* Inicializace prost edí */ rc = OCIEnvInit( (OCIEnv **) &p_env, OCI_DEFAULT, (size_t) 0, (dvoid **) 0 ); 40

Error Handle /* Inicializace Error Handlu */ rc = OCIHandleAlloc( (dvoid *) p_env, /* Env. Handle */ (dvoid **) &p_err, /* alokovaný handle (OUT) */ OCI_HTYPE_ERROR, /* typ alokovaného handlu */ (size_t) 0, (dvoid **) 0); 41

Service Context Handle /* Inicializace Service Context Handlu */ rc = OCIHandleAlloc( (dvoid *) p_env, /* Env. Handle */ (dvoid **) &p_svc, /* alokovaný handle (OUT) */ OCI_HTYPE_SVCCTX, /* typ alokovaného handlu */ (size_t) 0, (dvoid **) 0); 42

P ihlášení /* P ipojení k serveru inicializace Service Context Handlu*/ rc = OCILogon( p_env, /* Environment Handle */ p_err, /* Error Handle */ &p_svc, /* Server Context Handle */ "scott", /* Login name */ 5, /* a jeho délka */ "tiger", /* Heslo */ 5, /* a jeho délka */ "d458_nat", /* Jméno databáze */ 8); /* a jeho délka */ 43

Ošet ení chyb /* Ošet ení chyb */ if (rc!= 0) { OCIErrorGet( (dvoid *)p_err, /* Error Handle */ (ub4) 1, /* íslo zánzamu s chybou */ (text *) NULL, /* již nepodporováno */ &errcode, /* vrácené íslo chyby */ errbuf, /* buffer pro text chyby */ (ub4) sizeof(errbuf), /* a jeho velikost */ OCI_HTYPE_ERROR); /* typ handlu (také m že být OCI_HTYPE_ENV) */ printf("error - %.*s\n", 512, errbuf); exit(8); } 44

Statement Handle /* Alokace Statement Handlu */ rc = OCIHandleAlloc( (dvoid *) p_env, /* Env. Handle */ (dvoid **) &p_sql, /* alokovaný handle (OUT) */ OCI_HTYPE_STMT, /* typ alokovaného handlu */ (size_t) 0, (dvoid **) 0); 45

P íprava SQL dotazu /* P íprava SQL p íkazu (Statement Handlu) */ rc = OCIStmtPrepare( p_sql, /* Statement Handle */ p_err, /* Error Handle */ "select ename from emp where deptno=:x", /* SQL p íkaz */ (ub4) 37, /* a jeho délka */ (ub4) OCI_NTV_SYNTAX, /* verzi syntaxe dle verze serveru */ (ub4) OCI_DEFAULT); /* možnost sdíleného módu nebo defaultního */ 46

Vstupní prom nné dotazu /* Svázání hodnot s p íslušnými Bind prom nnými */ p_bvi = 10; /* DEPTNO = 10 */ rc = OCIBindByName( p_sql, /* Statement Handle */ &p_bnd, /* Bind Handle (OUT) */ p_err, /* Error Handle */ (text *) ":x", /* jméno prom nné */ -1, /* délka jména prom nné */ (dvoid *) &p_bvi, /* pointer na prom nnou s hodnotou */ sizeof(int), /* velikost hodnoty prom nné */ SQLT_INT, /* typ hodnoty prom nné */ (dvoid *) 0, (ub2 *) 0, (pro práci s poli) (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT); /* p ebere nastavení od Statement Handlu (nap. kódování) */ 47

Výstupní prom nné dotazu /* Definování výstupní prom nné (ename) */ rc = OCIDefineByPos( p_sql, /* Statement Handle */ &p_dfn, /* Define Handle */ p_err, /* Error Handle */ 1, /* pozice výstupní prom nné v SQL p íkazu */ (dvoid *) &p_sli, /* výstupní buffer */ (sword) 20, /* a jeho velikost */ SQLT_STR, /* typ výstupní prom nné */ (dvoid *) 0, (ub2 *)0, (pro práci s poli) (ub2 *)0, OCI_DEFAULT); /* mód (lze i dynamicky alokovat p i provád ní fetch */ 48

Vykonání p íkazu /* Vykonání p íkazu */ rc = OCIStmtExecute( p_svc, /* Service Context Handle */ p_sql, /* Statement Handle */ p_err, /* Error Handle */ (ub4) 1, /* pro neselect p íkazy po et opakování */ (ub4) 0, /* (pro práci s poli) */ (CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT); /* mód (OCI_COMMIT_ON_ SUCCESS, OCI_PARSE_ONLY */ 49

P enesení dat (fetch) /* P enesení zbývajících dat (fetch) */ while (rc!= OCI_NO_DATA) { /* podmínka */ printf("%s\n", p_sli); /* zobrazení */ rc = OCIStmtFetch( /* fetch */ p_sql, /* Statement Handle */ p_err, /* Error Handle */ 1, /* po et ádek k na tení */ 0, 0); } 50

Odpojení a úklid /* Odpojení a úklid */ rc = OCILogoff(p_svc, p_err); } rc = OCIHandleFree( (dvoid *) p_sql, OCI_HTYPE_STMT); rc = OCIHandleFree( (dvoid *) p_svc, OCI_HTYPE_SVCCTX); rc = OCIHandleFree( (dvoid *) p_err, OCI_HTYPE_ERROR); return; 51

The End 52