|
![]() | P°φprava a provßd∞nφ p°φkaz∙ SQL | ![]() | Zp∙soby použitφ SQL ve 602SQL | Direktivy #sql | ![]() |
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 1; CALL SQL_execute('INSERT INTO My_Tab(cislo1,cislo2,cislo3) VALUES (i,j,k);'); 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.
![]() | P°φprava a provßd∞nφ p°φkaz∙ SQL | ![]() | Zp∙soby použitφ SQL ve 602SQL | Direktivy #sql | ![]() |