- Vytvoril D2000 Dev Team na okt 12, 2017
Akcia DB_UPDATE a DBS_UPDATE
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]
DB_UPDATE handleIdent_Int, structIdent, retCodeIdent_Int [ORAHINT hintIdent_Str] DBS_UPDATE dbObjIdent, structIdent, retCodeIdent_Int [TRANS transHandle_Int] [ORAHINT hintIdent_Str]
handleIdent_Int | in | Identifikátor typu Int - (handle) spojenia s databázou (DB_CONNECT). |
dbObjIdent | in | Odkaz na objekt typu Tabuľka. |
rowIdent | in | Identifikátor jedného riadku štruktúry (modifikovaný riadok). |
structIdent | in | Identifikátor celej štruktúry (modifikované riadky). |
retCodeIdent_Int | out | Návratová hodnota typu Int - úspešnosť akcie. |
strExpression_Str | in | Vý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, ... | in | zoznam objektov, konštánt alebo lokálnych premenných, ktoré špecifikujú hodnoty parametrov parametrizovaného SQL výrazu strExpression_Str. |
structRowIdent | in | Odkaz 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_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 obaľujúcich znakov /*+ <orahint> */. Príklad použitia je uvedený tu. |
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:
- 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 vrowIdent
musia byť platné, inak sa modifikovanie neuskutoční, skončí s chybou a %GetLastExtErrorCode() vráti chybu 667. - 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:
Pridať komentár