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:

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_DELETE
DB_READ
DB_UPDATE

SQL_PREPARE
SQL_BINDIN
SQL_FETCH
SQL_FREE

Všetky databázové akcie
Napíšte komentár