Akcia DB_UPDATE a DBS_UPDATE


Funkcia
Modifikácia existujúceho riadku (riadkov) v databáze.


Deklarácia
 DB_UPDATE handleIdent_Int, rowIdent, retCodeIdent_Int [WHERE strExpression_Str [BINDIN varIdent1, varIdent2, ... ]] [ORAHINT hintIdent_Str] 

 DB_UPDATE handleIdent_Int, rowIdent, retCodeIdent_Int [WHERE strExpression_Str [BINDIN structRowIdent]] [ORAHINT hintIdent_Str] 

 DBS_UPDATE dbObjIdent, rowIdent, retCodeIdent_Int [WHERE strExpression_Str [BINDIN varIdent1, varIdent2, ... ]] [TRANS transHandle_Int] [ORAHINT hintIdent_Str] 

 DBS_UPDATE dbObjIdent, rowIdent, retCodeIdent_Int [WHERE strExpression_Str [BINDIN structRowIdent]] [TRANS transHandle_Int] [ORAHINT hintIdent_Str] 
 


alebo


 


DB_UPDATE handleIdent_Int, structIdent, retCodeIdent_Int [ORAHINT hintIdent_Str] 
 
DBS_UPDATE dbObjIdent, structIdent, retCodeIdent_Int [TRANS transHandle_Int] [ORAHINT hintIdent_Str] 
Parametre
handleIdent_IntinIdentifikátor typu Int - (handle) spojenia s databázou (DB_CONNECT).
dbObjIdentinOdkaz na objekt typu Tabuľka.
rowIdentinIdentifikátor jedného riadku štruktúry (modifikovaný riadok).
structIdentin Identifikátor celej štruktúry (modifikované riadky).
retCodeIdent_IntoutNávratová hodnota typu Int - úspešnosť akcie.
strExpression_StrinVýraz typu String, ktorý identifikuje modifikované riadky. Ak je výraz parametrizovaný, tak kľúčové slovo BINDIN a hodnoty parametrov (structRowIdent alebo varIdent1, varIdent2, ...) sú povinné.
varIdent1,
varIdent2, ...
inzoznam objektov, konštánt alebo lokálnych premenných, ktoré špecifikujú hodnoty parametrov  parametrizovaného SQL výrazu strExpression_Str.
structRowIdentinOdkaz na riadok lokálnej premennej typu Record alebo na riadok štruktúrovanej premennej. Hodnoty riadkov špecifikujú hodnoty parametrov parametrizovaného SQL výrazu strExpression_Str.
transHandle_IntinIdentifikátor Pripojenia na databázu.
hintIdent_StrinVý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 obaľujúcich znakov /*+ <orahint> */.
Príklad použitia je uvedený tu.
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

Databáza musí byť otvorená s prístupom _DB_MODIFY. Podobne ako pri akcii DB_READ ( DBS_READ), môžu byť modifikované riadky určené dvoma spôsobmi:

  1. Nastavením kľúčových položiek v riadku štruktúry (rowIdent), resp. v celej štruktúre (structIdent). Nastavenie musí byť realizované pred akciou DB_UPDATE. Položky musia byť označené ako kľúč pri definícii objektu typu Tabuľka. Potom sa v databáze hľadá riadok, ktorý má zhodnú hodnotu pre kľúčové položky a tento je modifikovaný. Vkladaný riadok alebo štruktúra musia mať korektný typ štruktúry. Hodnoty všetkých kľúčových položiek v rowIdent musia byť platné, inak sa modifikovanie neuskutoční, skončí s chybou a %GetLastExtErrorCode() vráti chybu 667.
  2. Hodnotou výrazu strExpression_Str, ktorý predstavuje klauzulu WHERE pre SQL príkaz UPDATE, ktorý vykonáva zmenu databázy. V tomto prípade je hodnota kľúčovej položky v štruktúre nepoužitá.

Pokiaľ nie je zadaný (alebo je prázdny) výraz strExpression_Str ani nie je zadefinovaný kľúč pri definícii objektu typu Tabuľka, tak akcia vráti chybu _ERR_TRANS_ERROR (11) a premenná _ERR_NR_TRANS_EX bude mať hodnotu BAD_CONDITION.

Pozn: odporúčame používať verziu bez výrazu strExpression_Str - Oracle pri použití výrazu krátkodobo zamkne aktualizovanú tabuľku ako aj všetky tabuľky, do ktorých má aktualizovaná tabuľka foreign indexy. Toto môže spôsobiť zablokovanie, ak iná prebiehajúca transakcia aktualizovala nejaké riadky v týchto tabuľkách. Zablokovanie potrvá až kým nebude prebiehajúca transakcia ukončená.

Výhodou akcie DBS_UPDATE 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_UPDATE je v rýchlosti. Každé volanie akcie DBS_UPDATE 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_UPDATE sa vykoná rovnako rýchlo ako akcia DB_UPDATE a navyše sa ušetrí čas potrebný na spracovanie explicitného príkazu na otvorenie databázy DB_CONNECT.

Potreba otvorenia a zatvorenia databázy sa môže eliminovať v rámci transakčného spracovania tak, že za príkazom nasleduje parameter TRANS.



Súvisiace stránky:

Write a comment...