Porovnávané verzie
Kľúč
- Tento riadok sa pridal
- Riadok je odstránený.
- Formátovanie sa zmenilo.
Akcia DB_UPDATE a DBS_UPDATE
Blok kódu | ||||
---|---|---|---|---|
| ||||
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] |
Blok kódu | ||||
---|---|---|---|---|
| ||||
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 (vkladaný modifikovaný riadok). |
structIdent | in | Identifikátor celej štruktúry (vkladané 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ľúčovej položky 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žka musí Položky musia byť označená 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žku kľúčové položky a tento je modifikovaný. Vkladaný riadok alebo štruktúra musia mať korektný typ štruktúry. Všetky položky každého vkladaného riadku musia mať platné hodnotyHodnoty 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.