Akcia SQL_SELECT


Funkcia
Akcia vykoná SQL príkaz SELECT.


Deklarácia
SQL_SELECT dbObjIdent, retCodeIdent_Int, [maxRowsIdent_Int], selectIdent_String [TRANS transHandle_Int]  BIND ...
 


alebo


 


SQL_SELECT connectString, retCodeIdent_Int, [maxRowsIdent_Int], selectIdent_String  ON dbManIdent  BIND ...
 


pričom za kľúčovým slovom BIND sa musí nachádzať jedna z možností:

BIND _locVar1, _locVar2, ...
BIND _locVarRowIdent
BIND _locVarRecordIdent

Parametre
dbObjIdentinOdkaz na objekt typu Databáza alebo Tabuľka.
connectStringinIdentifikátor typu Text, alebo textová konštanta obsahujúca konektovací string na databázu.
retCodeIdent_IntoutIdentifikátor typu Int- návratový kód.
maxRowsIdent_IntinIdentifikátor typu Int - počet naraz načítaných riadkov (ak nie je uvedený, náhradná hodnota je 1).
selectIdent_StringinIdentifikátor typu String.
_locVar1, _locVar2, ...inZoznam lokálnych premenných.
_locVarRowIdentinOdkaz na riadok lokálnej premennej typu Record.
_locVarRecordIdentinIdentifikátor lokálnej premennej typu Record.
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
Akcia SQL_SELECT vznikla za účelom čo najjednoduchšieho vykonania SQL príkazu SELECT. Vo svojej funkčnosti združuje akcie SQL_CONNECT, SQL_PREPARE, SQL_FETCH a SQL_DISCONNECT.

Databázu, v rámci ktorej sa SQL príkaz SELECT vykoná je možné určiť:

  1. Parametrom dbObjIdent - tento predstavuje objekt typu Databáza alebo Tabuľka. V tomto prípade je možné zadať (nepovinný) parameter transHandle_Int, ktorý definuje databázové spojenie (hodnota parametra sa získala predchádzajúcim volaním akcie DB_TRANS_OPEN), v rámci ktorého sa SQL príkaz vykoná.
    Ak parameter transHandle_Int nie je definovaný, SQL príkaz bude vykonaný na niektorom z preddefinovaných databázových pripojení.
  2. Parametrom connectString - ktorý je bližšie popísaný v akcii SQL_CONNECT. V tomto prípade je potrebné špecifikovať proces DB Manager, ktorý príslušný SQL príkaz vykoná.

Vlastný príkaz SELECT je definovaný hodnotou parametra selectIdent_String. Podľa počtu stĺpcov príkazu SELECT je potrebné vybrať vhodnú variantu zverejnenia jeho výsledkov prostredníctvom povinného kľúčového slova BIND. Význam a interpretácia jednotlivých variant je popísaný v rámci akcie SQL_PREPARE.

Nepovinný identifikátor maxRowsIdent_Int definuje počet riadkov výberu, ktorý bude zverejnený. Ak nie je uvedený, jeho hodnota je 1. Počet riadkov, ktorý je možné prečítať, závisí aj od použitého variantu BIND. Príslušný popis obsahuje akcia SQL_FETCH.

Maximálny počet vrátených riadkov je obmedzený konfiguračným parametrom databázy Maximum vrátených riadkov. Pri prekročení tohoto počtu riadkov bude do lokálnej štruktúry _locVarRecordIdent načítaných prvých Maximum vrátených riadkov a v retCodeIdent_Int sa vráti chyba _ERR_DATABASE_ROWS_LIMIT.

Poznámka

Hodnoty, ktoré vracia SQL príkaz, sú vložené do lokálnych premenných podľa poradia (1. hodnota do 1. bindovanej premennej, 2. do druhej atď). Toto platí aj pri vkladaní do lokálnej štruktúrovanej premennej (t.j. nepozerá sa na názvy stĺpcov). Potenciálne nebezpečné sú SELECT-y typu "SELECT *" - pokiaľ sa poradie stĺpcov v databáze líši od poradia stĺpcov v štruktúrovanej premennej, hodnoty budú vložené do nesprávnych stĺpcov. Preto odporúčame explicitné vymenovanie stĺpcov v SQL dotaze (SELECT COL1, COL2, COL3 ...). 

Ak sú načítavané dáta z jedinej tabuľky alebo pohľadu, namiesto SQL_SELECT použite akciu DBS_READ.

Príklad
Príklad predpokladá existenciu objektu typu Databáza s menom gnat_test. V rámci databázy existuje tabuľka OBJLIST, v ktorej je stĺpec id číselného typu.
Procedúra Demo1 predstavuje rôzne (nie všetky) varianty akcie SQL_SELECT.
Procedúry Demo2 a Demo3 plnia tú istú funkciu. Demo2 je implementovaná prostredníctvom akcie SQL_SELECT a Demo3 je implementovaná akciami SQL_CONNECT, SQL_PREPARE, SQL_FETCH a SQL_DISCONNECT.
 


 PROCEDURE Demo1
 
  INT  _retCod
  INT _maxId
 
   ; výber prostredníctvom objektu typu databáza 
  SQL_SELECT gnat_test, _retCode,,  "select max(id) from OBJLIST" BIND  _maxId
  IF _retCode = _ERR_NO_ERROR THEN
  ; premenná _maxId je naplnená
   ELSE
  ; chyba
  ENDIF
 
  ; výber prostredníctvom objektu typu tabuľka
  SQL_SELECT DB.OBJLIST, _retCode,,  "select max(id) from OBJLIST" BIND _maxId
  IF _retCode = _ERR_NO_ERROR  THEN
  ; premenná _maxId je naplnená
   ELSE
  ; chyba
  ENDIF
 
  INT _transHandle
   ; vytvorenie transakcie prostredníctvom objektu typu databáza 
  DB_TRANS_OPEN gnat_test, _transHandle, _retCode
  IF _retCode = _ERR_NO_ERROR  THEN
    ; transakcia otvorená
    ; výber v rámci transakcie
    SQL_SELECT DB.OBJLIST, _retCode,, "select max(id) from OBJLIST"  TRANS _transHandle BIND _maxId
    IF _retCode = _ERR_NO_ERROR THEN
    ; premenná _maxId je naplnená
    ELSE
    ; chyba
    ENDIF 
 
    DB_TRANS_CLOSE _transHandle 
  ELSE 
    ; chyba 
   ENDIF 
 
  ; výber s pripojením
  SQL_SELECT "connection String", _retCode,, "select max(id) from OBJLIST" ON SELF.DBM BIND _maxId
  IF _retCode = _ERR_NO_ERROR THEN
  ; premenná _maxId je naplnená
  ELSE
  ; chyba
  ENDIF
 
 END Demo1
 
 
 PROCEDURE Demo2(INT _maxId)
 
 INT _retCode
 
  _maxId := %SetInvalid(0)
  ; výber prostredníctvom objektu typu databáza
  SQL_SELECT gnat_test, _retCode,, "select max(id) from OBJLIST" BIND _maxId
  IF _retCode = _ERR_NO_ERROR THEN
  ; premenná _maxId je naplnená
  ELSE
  ; chyba
  ENDIF
 
  END Demo2
 
 
 PROCEDURE Demo3(INT _maxId)
  INT _retCode
  INT _handle
  _maxId := %SetInvalid(0)
  ;
  SQL_CONNECT gnat_test, _handle, _retCode
  IF _retCode <> _ERR_NO_ERROR THEN 
   RETURN ; chyba
  ENDIF
 
  SQL_PREPARE _handle, _retCode, "select max(id) from OBJLIST" BIND _maxId
  IF _retCode <> _ERR_NO_ERROR THEN
   RETURN ; chyba
  ENDIF 
 
  SQL_FETCH _handle, _retCode
  IF _retCode <> _ERR_NO_ERROR THEN
   RETURN ; chyba 
  ENDIF
 
  SQL_DISCONNECT _handle
 
 END Demo3
 
 
 BEGIN
  
  CALL Demo1
 
  INT _max
  CALL Demo2(_max)
 
  CALL Demo3(_max)
 END

Súvisiace stránky:

Write a comment...