Prenos handle na databázové spojenie medzi bežiacimi ESL skriptami

Prenos handle na databázové spojenie medzi ESL skriptami je zabezpečený pomocou RPC procedúr. V deklarácii RPC procedúry je potrebné označiť parameter reprezentujúci handle na databázové spojenie, vymenovaným typom DB_HANDLE. Algoritmus je podmienený existenciou databázového spojenia. Ak handle na databázové spojenie je neplatná hodnota alebo ukazuje na neexistujúce databázové spojenie, algoritmus skončí s chybou.

Vymenovaný typ DB_HANDLE je typu INT.

Deklarácia RPC procedúry:


  RPC PROCEDURE ProcName [([IN]  DB_HANDLE _db_handle[,_db_handle2, ...] [IN] DB_HANDLE _db_handle3]...)] 

 ;akcie
 
 END ProcName 

_db_handle, ktoré sa môže prenášať medzi ESL skriptami vzniká akciami: DB_CONNECT, PG_DISCONNECT, SQL_CONNECT, DB_TRANS_OPEN.

Poznámky:

  • Vlastníkom handle na databázové spojenie môže byť výlučne vždy iba jeden ESL skript, ktorí zároveň zabezpečí aj zrušenie tohto handle.
  • Handle na databázové spojenie nie je možné prenášať medzi esl skriptami rôznych procesov.
  • Ak pri volaní RPC procedúry ako skutočný parameter na mieste formálneho parametra typu DB_HANDLE použijete obyčajnú hodnotu, ktorá nie je handle na databázové spojenie, ESL skript vyhľadá handle podľa vstupnej hodnoty:
    1. Ak databázové spojenie označené vstupnou hodnotou existuje, tak ho prenesie.
    2. Ak databázové spojenie označené vstupnou hodnotou neexistuje, tak ESL skript vyhlási chybu.

       INT _db_handle
       
       _db_handle := 5
       
       CALL [objIdent]  INSERT (_db_handle) ON procIdent
    3. Ak vstupná hodnota, reprezentujúca handle, je neplatná (Invalid), volajúci Esl skript je ukončený s RunTime chybou.
  • Ak je volanie RPC procedúry asynchrónne, tak po takom volaní databázové spojenie v tomto skripte zaniká a vlastníkom sa stáva volaný ESL skript:
     ******************
     
     ; volaný  ESL skript
     RPC PROCEDURE InsertToDB(DB_HANDLE _handle)
     .....
     END InsertToDB
     
     ***************
     
     
      ; volajúci ESL skript
     INT _db_handle
     
     CALL[...] InsertToDB(_db_handle) ASYNC ON
     ....
     ; Po takomto volaní, handle na databázové spojenie v tomto skripte zaniká, vlastníkom sa stáva volaný ESL skript
     
     *****************
  • Ak je volanie RPC procedúry synchrónne, tak existujú dve možnosti:
    1. Ak formálny parameter reprezentujúci DB_HANDLE je označený kľúčovým slovom IN, pri volaní RPC procedúry sa vlastníkom handle na databázové spojenie natrvalo stane ESL skript obsahujúci deklaráciu volanej RPC procedúry.

       ******************
       ; volaný ESL skript
       RPC PROCEDURE InsertToDB(IN DB_HANDLE _handle)
       .....
       END InsertToDB
       ***************
       
      
       ; volajúci ESL skript
       INT _db_handle
       
       CALL[...] InsertToDB(_db_handle) ON ....
       ; po takomto volaní  databázové spojenie v tomto skripte zaniká, vlastníkom sa stáva volaný ESL skript
       *************** 
    2. Ak formálny parameter reprezentujúci DB_HANDLE nie je označený kľúčovým slovom IN, pri volaní RPC procedúry sa dočasným vlastníkom handle na databázového spojenia stane ESL skript obsahujúci deklaráciu volanej RPC procedúry. Po skončení volanej RPC procedúry sa vlastníkom stáva skript, z ktorého bola RPC procedúra volaná.

       ******************
       ; volaný ESL skript
       RPC PROCEDURE InsertToDB(DB_HANDLE _handle)
       .....
       END InsertToDB
       ***************
       
       
       ; volajúci ESL skript
       INT _db_handle
       
       CALL[...] InsertToDB(_db_handle)  SYNC ON ....
       ; po takomto volaní, vlastníkom databázového spojenia ostáva volajúci ESL skript
       *************** 

Súvisiace stránky:

1 komentár

  1. Anonymný

    Ešte aspoň takto doplním, že ak je DB_HANDLE otvorené aj s transakciu, pri SQL_EXEC treba prenáštať v prvom parametri DB_HANDLE transakcie, v druhom parametri DB_HANDLE databázového spojenia.

Napíšte komentár