Parametrizácia SQL príkazov a výrazov znamená symbolické zadanie hodnôt v SQL príkazoch a výrazoch a neskoršie
naplnenie parametrov konkrétnymi hodnotami.
Príklad parametrizovaného výrazu: " Id= #PAR# AND NAME LIKE #PAR# "
Príklad parametrizovaného príkazu: "SELECT Name, Surname FROM Persons WHERE Id= #PAR# AND Name LIKE #PAR# "
Existujú 3 spôsoby špecifikácie parametrov použiteľné v množine akcií procesu
D2000 DBManager:
-
Znakom "?"
Konvencia použitá v ODBC rozhraní (funguje iba pre ODBC verziu procesu DBManager). Každý parameter je špecifikovaný jedným otáznikom.
Príklad: " Id > ? AND Name = ? "
Poznámka: Takto parametrizovaný SQL výraz nebude fungovať pre OCI verziu procesu DBManager. -
Výrazom ":name"
Konvencia použitá v OCI rozhraní (funguje iba pre OCI verziu procesu DbManager). Každý parameter je špecifikovaný dvojbodkou a menom.
Príklad: " Id > :par1 AND Name = :par2 "
Poznámka 1: Takto parametrizovaný SQL výraz nebude fungovať pre ODBC verziu procesu DBManager.
Poznámka 2: Tento spôsob parametrizácie umožňuje viacnásobné použitie toho istého parametra (napr. :par1) v SQL príkaze alebo výraze:
"SELECT Name, Surname FROM Person WHERE Name= :par1 OR Surname = :par1 OR BirthDate > :par2 " -
Výrazom "#PAR#"
Vnútorný zápis pre proces DbManager. ODBC verzia procesu DBManager pred použitím nahradí všetky výrazy #PAR# znakom ? (prevedie ich do ODBC konvencie), OCI verzia procesu DbManager pred použitím nahradí všetky výrazy #PAR# výrazmi :01, :02, atď. (prevedie ich do OCI konvencie).
Tento zápis je univerzálny a takto parametrizované SQL príkazy, ktoré ho používajú, nie je potrebné pri prechode medzi ODBC a OCI verziami procesu DBManager meniť.
Parametrizáciu môže použiť v SQL výraze vybraná množina akcií pracujúcich s databázou. Jedná sa o akcie:
Pokiaľ je SQL výraz parametrizovaný, akcia musí použiť kľúčové slovo BINDIN a za ním jedno z nasledujúcich:
- zoznam objektov, konštánt alebo lokálnych premenných,
- odkaz na riadok lokálnej premennej typu Record alebo na riadok štruktúrovanej premennej.
Hodnoty parametrov sa nastavia podľa hodnôt uvedených za kľúčovým slovom BINDIN.
Parametrizáciu podporuje aj akcia SQL_PREPARE, ale v tomto prípade nie je zoznam hodnôt parametrov
súčasťou akcie. Uvedením kľúčového slova BINDOUT (namiesto BIND) sa špecifikuje, že SQL príkaz je parametrizovaný a následne sa volaním akcie
SQL_BINDIN nastavia hodnoty parametrov. Výhodou je, že pre získanie výsledkov s inými hodnotami parametrov
nie je potrebné znovu volať SQL_PREPARE, ale stačí zopakovať SQL_BINDIN
s novými hodnotami a následne je možné volať SQL_FETCH na získanie výsledkov.
Zmyslom parametrizácie je zrýchliť a uľahčiť prácu SQL databázy. Pri vyhodnocovaní SQL príkazu dochádza k jeho parsovaní a kompilácii. Pokiaľ
sa použije viackrát ten istý SQL príkaz, SQL databáza môže recyklovať už parsovaný a skompilovaný príkaz. Parametrizáciou možno napr. príkazy:
"SELECT Name FROM Person WHERE Id=1"
"SELECT Name FROM Person WHERE Id=5"
"SELECT Name FROM Person WHERE Id=100"
nahradiť jediným príkazom
"SELECT Name FROM Person WHERE Id= #PAR#"
a teda miesto troch SQL príkazov bude databáza parsovať a kompilovať iba jeden (a pri druhom a ďalších vykonávaniach ho môže recyklovať).
Pokiaľ sa použije parametrizácia pri volaní SQL_PREPARE a nastavenie parametrov viacnásobnou akciou
SQL_BINDIN, je zaručené, že parsovanie a kompilácia SQL príkazu prebehne iba raz (pri volaní
SQL_PREPARE).
Pokiaľ sa použije parametrizácia pri volaniach akcií DB(S)_DELETE, DB(S)_READ
alebo DB(S)_UPDATE, je vhodné upraviť parametre databázy (napr. Oracle: session_cached_cursors), aby
táto uchovávala (cachovala) dostatočné množstvo skompilovaných príkazov (kurzorov), aby medzi volaniami DB(S)_* príkazov zostali v kurzorovej cache.
Súvisiace odkazy:
DB_DELETEDB_READ
DB_UPDATE
SQL_PREPARE
SQL_BINDIN
SQL_FETCH
SQL_FREE
Všetky databázové akcie
Pridať komentár