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).
Pozn: ak nie je zadaná ani podmienka, ani tabuľka nemá kľúčové stĺpce, načítajú sa všetky dáta z tabuľky (ak ich nie je viac ako špecifikované maximum).
Pozn: ak sú čítané dáta do jedného riadku štruktúry (verzie s parametrom rowIdent_Int) s použitím kľúčových položiek, tak hodnoty všetkých kľúčových položiek v rowIdent_Int musia byť platné, inak sa čítanie neuskutoční, skončí s chybou a %GetLastExtErrorCode() vráti chybu 667.
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.