602SQL-Úplná dokumentace Index  

Dynamické SQL příkazy uvnitř procedur uložených na serveru

V některých situacích nelze SQL příkaz přímo zařadit mezi ostatní příkazy v uložené proceduře, například když:

V těchto a podobných případech je nutno analýzu a optimalizaci příkazu odložit až na dobu těsně před jeho prováděním. To umožňuje funkce SQL_execute. Dostane jako parametr příkaz nebo posloupnost příkazů v jazyce SQL, analyzuje je, optimalizuje a provede.

Provádění SQL příkazů pomocí funkce SQL_execute je méně efektivní než přímé vložení příkazu do uložené procedury (analýza a optimalizace se provádí znovu před každým provedením příkazu), ale je flexibilnější - příkaz může být dynamicky sestaven až těsně před provedením.

V SQL příkazu použitém ve funkci SQL_execute je možné použít i proměnné existující v SQL proceduře, v níž je SQL_execute voláno. V příkladu níže je proměnná J předaná jako hodnota parametru, proměnná I je deklarovaná globálně uvnitř procedury, proměnná K je lokální uvnitř složeného příkazu. Všechny tyto proměnné lze použít v SQL_execute.

PROCEDURE MY_PROC(IN j INT);
BEGIN
  DECLARE i INT DEFAULT 1;
  BEGIN
    DECLARE k INT DEFAULT 3;
    DECLARE stmt CHAR(80);
    SET stmt = 'INSERT INTO ' + 'My_Tab' + '(cislo1,cislo2,cislo3) VALUES (i,j,k);';
    CALL SQL_execute(stmt);
  END;
END;

Dojde-li k chybě při překladu SQL příkazu, pak funkce SQL_execute vrátí kladné číslo chyby a příkaz se neprovede. Na provádění ostatních příkazů to nemá vliv.

Dojde-li k chybě při provádění SQL příkazu ve funkci SQL_execute, důsledky jsou stejné jako při provádění všech ostatních SQL příkazů. Chyby lze zpracovávat pomocí handlerů. Není-li chyba zpracována CONTINUE handlerem, pak se přiřazení hodnoty této funkce ani následující SQL příkazy neprovedou.