Page tree
Skip to end of metadata
Go to start of metadata

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 (vkladaný riadok).
structIdentin Identifikátor celej štruktúry (vkladané 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ľúčovej položky v riadku štruktúry (rowIdent), resp. v celej štruktúre (structIdent). Nastavenie musí byť realizované pred akciou DB_UPDATE. Položka musí byť označená ako kľúč pri definícii objektu typu Databáza. Potom sa v databáze hľadá riadok, ktorý má zhodnú hodnotu pre kľúčovú položku 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é hodnoty.
  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á.


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…