DB_READ
Akcia DB_READ a DBS_READ
Funkcia
Čítanie jedného alebo viacerých riadkov z tabuľky.
Deklarácia
DB_READ handleIdent_Int, rowIdent, retCodeIdent_Int [WHERE strExpression_Str [BINDIN varIdent1, varIdent2, ... ]][ORAHINT hintIdent_Str]
DB_READ handleIdent_Int, rowIdent, retCodeIdent_Int [WHERE strExpression_Str [BINDIN structRowIdent ]] [ORAHINT hintIdent_Str]
DBS_READ dbObjIdent, rowIdent, retCodeIdent_Int [WHERE strExpression_Str [BINDIN varIdent1, varIdent2, ... ]] [TRANS transHandle_Int] [ORAHINT hintIdent_Str]
DBS_READ dbObjIdent, rowIdent, retCodeIdent_Int [WHERE strExpression_Str [BINDIN structRowIdent ]] [TRANS transHandle_Int] [ORAHINT hintIdent_Str]
alebo
DB_READ handleIdent_Int, localStructIdent, retCodeIdent_Int, maxRows_Int [WHERE strExpression_Str [BINDIN varIdent1, varIdent2, ... ]] [ORAHINT hintIdent_Str]
DB_READ handleIdent_Int, localStructIdent, retCodeIdent_Int, maxRows_Int [WHERE strExpression_Str [BINDIN structRowIdent ]] [ORAHINT hintIdent_Str]
DBS_READ dbObjIdent, localStructIdent,retCodeIdent_Int, maxRows_Int [WHERE strExpression_Str [BINDIN varIdent1, varIdent2, ... ]] [TRANStransHandle_Int] [ORAHINT hintIdent_Str]
DBS_READ dbObjIdent, localStructIdent,retCodeIdent_Int, maxRows_Int [WHERE strExpression_Str [BINDIN structRowIdent ]] [TRANStransHandle_Int] [ORAHINT hintIdent_Str]
Parametre
handleIdent_Int | in | Identifikátor typu Int - (handle) spojenia s tabuľkou (DB_CONNECT). |
dbObjIdent | in | Odkaz na objekt typu Tabuľka. |
rowIdent_Int | in/out | Identifikátor jedného riadku štruktúry (výsledok čítania). |
retCodeIdent_Int | out | Identifikátor návratovej hodnoty - úspešnosť akcie. |
localStructIdent | out | |
maxRows_Int | in | Identifikátor - maximálny počet čítaných riadkov. |
strExpression_Str | in | Výraz, ktorý definuje čítaný riadok tabuľky (riadky). Výraz môže obsahovať aj podmienku triedenia (napr. "ID<100 ORDER BY Name"). Pokiaľ je výraz parametrizovaný, musí byť uvedené aj kľúčové slovo BINDIN nasledované hodnotami parametrov (structRowIdent alebo varIdent1, varIdent2, ...). |
varIdent1, | in | Zoznam objektov, konštánt alebo lokálnych premenných, ktoré sa použijú na mieste parametrov parametrizovaného výrazu strExpression_Str. |
structRowIdent | in | Odkaz na riadok lokálnej premennej typu Record alebo na riadok štruktúrovanej premennej. Hodnoty z tohto riadku sa použijú na mieste parametrov parametrizovaného SQL výrazu strExpression_Str. |
transHandle_Int | in | Identifikátor Pripojenia na databázu. |
hintIdent_Str | in | Výraz typu String, ktorý definuje Oracle SQL hint. Ten je použitý ako inštrukcia pre optimalizátor
výkonu SQL príkazu.
Zapisuje hodnotu bez úvodných a koncových znakov /*+ <orahint>
*/. |
Návratový kód
Hodnota parametra retCodeIdent_Int - pozri tabuľku chybových stavov. Je možné získať rozšírenú informáciu o chybe.
Popis
Klauzula WHERE pre SQL príkaz SELECT, ktorý vykoná výber z tabuľky, je definovaná buď hodnotou výrazu
strExpression_Str, alebo, ak táto hodnota nie je zadaná,
tak hodnotami definovaných (platných) kľúčových položiek (položky označené ako kľúčové pri definícii objektu typu Tabuľka) v prvom riadku štruktúry (rowIdent alebo
localStructIdent[1]).
Nastavenie týchto hodnôt musí byť realizované pred akciou DB_READ (DBS_READ).
Z toho vyplýva, že klauzula WHERE nie je súčasťou SQL príkazu SELECT, ak nie je definovaná hodnota výrazu
strExpression_Str a
neexistujú kľúčové položky (položky označené ako kľúčové pri definícii objektu typu Tabuľka),
alebo nie je definovaná (platná) ani jedna z hodnôt kľúčových položiek,
alebo štruktúra má nulovú dimenziu (v prípade localStructIdent).
Prvá forma zápisu akcie umožňuje prečítať jeden riadok z tabuľky do
jedného riadku štruktúry.
Ak pri výbere vyhovuje podmienke pre výber viac ako jeden riadok tabuľky, akcia DB_READ(DBS_READ)
načíta prvý riadok. Ak nevyhovuje ani jeden riadok, akcia vráti chybu prostredníctvom retCodeIdent_Int. Typ
štruktúry (rowIdent) musí byť zhodný s typom tabuľky.
Druhá forma zápisu umožňuje prečítať jeden, alebo viac riadkov z tabuľky. Maximálny počet riadkov určuje hodnota parametra
maxRows. Ak hodnota maxRows je nastavená na -1, systém sa snaží prečítať všetky riadky zodpovedajúce zadanej
podmienke. Maximálny počet riadkov je obmedzený konfiguračným parametrom databázy Maximum vrátených riadkov.
Pri prekročení tohto počtu riadkov bude do lokálnej štruktúry localStructIdent načítaných prvých Maximum vrátených riadkov
a v retCodeIdent_Int sa vráti chyba _ERR_DATABASE_ROWS_LIMIT.
Ak je hodnota maxRows väčšia ako Maximum vrátených riadkov, načíta sa najviac Maximum vrátených riadkov
riadkov. Pokiaľ je k dispozícii viac riadkov, v retCodeIdent_Int sa vráti chyba _ERR_DATABASE_ROWS_LIMIT.
Ak je hodnota maxRows nastavená na -2, systém najskôr zistí počet riadkov zodpovedajúcich danej podmienke. Ak ich
je 0 alebo viac ako Maximum vrátených riadkov, nenačíta žiadne riadky, v opačnom prípade načíta zistený počet riadkov. Tento spôsob môže byť z
optimalizačných dôvodov rýchlejší ako pre maxRow=-1. Počet riadkov sa zisťuje pomocou
výberu "SELECT COUNT(*)
FROM table_name [WHERE where_condition]".
Ak je zadaná podmienka StrExpression_Str, pred zistením počtu
riadkov sa ešte zisťuje, či podmienka obsahuje klauzulu ORDER BY. Ak
klauzulu obsahuje, táto sa aj s nasledujúcim
textom odstráni. Dôvodom je, že pri zisťovaní počtu riadkov napr. Sybase neakceptuje "SELECT COUNT(*) FROM aaaa
WHERE bbbb = cccc ORDER BY dddd" a vracia chybu Function or column reference to 'dddd' in the select list must
also appear in a GROUP BY.
Parameter localStructIdent musí predstavovať meno lokálnej štruktúry zodpovedajúceho typu (t.j. rovnakého, aký je použitý v
konfigurácii objektu dbObjIdent typu Tabuľka). Pokiaľ chcete mať istotu, že výstup nebude riadený klauzulou
WHERE vyskladanou na základe kľúčových položiek, je vhodné pred volaním akcie DB_READ(DBS_READ) redimenzovať lokálnu štruktúru na 0.
Po výbere riadkov z tabuľky sú tieto prenesené do premennej localStructIdent. V prípade potreby je jej zmenený
rozmer (REDIM). Ak výberovej podmienke nevyhovuje ani jeden riadok, akcia
sa ukončí úspešne
(retCodeIdent_Int = _ERR_NO_ERROR) a rozmer štruktúry localStructIdent
sa zmení na 0.
Výhodou akcie DBS_READ pri práci s tabuľkou je možnosť vynechať jej otvorenie a zatvorenie (jednoduchší
zápis).
Pre D2000 verziu 5: Nevýhoda akcie DBS_READ je v rýchlosti. Každé volanie akcie DBS_READ
má za následok, v rámci jej obsluhy v procese D2000 DBManager, nutnosť databázu otvoriť a následne zatvoriť, čo môže byť časovo náročná činnosť a
predstavuje z databázového hľadiska pomerne neštandardný postup. Nutnosť otvárania a zatvárania databázy je možné potlačiť v rámci transakčného spracovania tak, že za príkaz uvedieme
parameter TRANS.
Pre D2000 verziu 6 a vyššie:
Optimalizácia procesu
D2000 DBManager (recyklovanie spojení, predpripravené spojenia) spôsobila, že akcia DBS_READ sa vykoná rovnako
rýchlo ako DB_READ a navyše sa ušetrí čas potrebný na spracovanie explicitného príkazu na otvorenie databázy
DB_CONNECT.
Súvisiace stránky: