Čítanie databázy SQL príkazom
SELECT je implementované v dvoch alebo troch fázach.
Prvú (prípravnú) fázu vykoná akcia
SQL_PREPARE. Nad databázou (je daná hodnotou identifikátora
handleIdent_Int)
pripraví (a pokiaľ nie je použité kľúčové slovo
BINDOUT, aj vykoná) príkaz
SELECT definovaný hodnotou výrazu
selectStringExpr. Úspešnosť akcie je indikovaná hodnotou
retCodeIdent_Int.
Druhá fáza je potrebná vtedy, keď bolo použité kľúčové slovo
BINDOUT. Znamená to, že vo výraze
selectStringExpr
bola použitá
parametrizácia a je nutné volaním
SQL_BINDIN
nastaviť hodnoty vstupných parametrov výrazu
selectStringExpr a následne výraz vykonať.
Posledná fáza je postupné čítanie riadkov, ktoré pripravil príkaz
SELECT akciou
SQL_FETCH.
Čítanie prebieha zásadne do lokálnych premenných, ktoré sú uvedené za kľúčovým slovom
BIND alebo
BINDOUT akcie
SQL_PREPARE.
Tu sú tri možné
varianty:
- Zoznam neštruktúrovaných lokálnych premenných.
Čítanie prebieha po jednom riadku do lokálnych premenných, ktoré sú vymenované za kľúčovým slovom BIND alebo BINDOUT.
- Odkaz na jeden riadok lokálnej premennej typu Record.
Čítanie prebieha po jednom riadku do jedného riadku lokálnej štruktúrovanej premennej. Štruktúra čítaných dát musí byť
zhodná so štruktúrou lokálnej premennej.
- Odkaz na lokálnu premennú typu Record.
Čítanie prebieha po jednom alebo viacerých riadkov lokálnej premennej. Tejto je podľa potreby pred naplnením výsledku
čítania zmenený rozmer. Štruktúra čítaných dát musí byť zhodná zo štruktúrou lokálnej premennej.
Pre jedno handle (získané akciou
SQL_CONNECT) môže byť súčasne aktívne len jedno čítanie.
Akcia
SQL_PREPARE zruší platnosť predchádzajúcej akcie. Explicitne ukončiť čítanie je možné pomocou akcie
SQL_FREE.
Poznámka: použitím
parametrizácie je možné uľahčiť prácu SQL databáze, pretože príprava (kompilácia)
parametrizovaného SQL výrazu sa vykoná iba raz (v rámci akcie
SQL_PREPARE). Následne je nutné nastaviť parametre akciou
SQL_BINDIN (ktorá SQL príkaz aj vykoná) a jeden alebo viackrát volať
SQL_FETCH
na získanie výsledkov. Potom je možné nastaviť nové hodnoty parametrov a znovu vykonať SQL príkaz opätovným volaním
SQL_BINDIN a získať nové výsledky volaním
SQL_FETCH.
Vhodným nastavením parametrov databázy (napr. Oracle:
session_cached_cursors) je možné zabezpečiť recyklovanie
kurzorov (skompilovaných príkazov) medzi volaniami
SQL_PREPARE.