Deklarace handleru (SQL)

deklarace_handleru ::= DECLARE { CONTINUE | EXIT | REDO | UNDO } HANDLER FOR v²jimka {, v²jimka  p°φkaz;
v²jimka ::=  identifikßtor_v²jimky | SQLSTATE [ VALUE ] sqlstate | SQLEXCEPTION | SQLWARNING | NOT FOUND 

Touto deklaracφ se handler zadan² p°φkazem p°i°adφ ke specifikovan²m v²jimkßm nebo t°φdßm v²jimek a m∙₧e se v rozsahu platnosti tΘto deklarace uplatnit p°i oÜet°enφ v²jimky.

Je-li v deklaraci handleru uveden identifikßtor_v²jimky, musφ b²t d°φve deklarovßn v deklaraci v²jimky. Handler se zavolß, pokud je tato v²jimka aktivovßna p°φkazem SIGNAL. Stejnß v²jimka nesmφ b²t uvedena dvakrßt ve stejn²ch nebo r∙zn²ch deklaracφch handleru ve stejnΘm rozsahu platnosti. Je-li v deklaraci tΘto v²jimky uveden sqlstate, pak handler je p°i°azen i k tomuto sqlstate.

Je-li v deklaraci handleru uvedeno SQLSTATE sqlstate, pak handler se zavolß, kdykoli tento sqlstate nastane.

Je-li v deklaraci handleru uvedeno slovo SQLEXCEPTION, SQLWARNING nebo NOT FOUND, handler se zavolß, nastane-li libovolnß chyba krom∞ Φtenφ neexistujφcφho zßznamu v p°φkazu FETCH (pro SQLEXCEPTION), libovolnΘ varovßnφ (pro SQLWARNING) nebo Φtenφ neexistujφcφho zßznamu v p°φkazu FETCH (pro NOT FOUND). V²jimka ╚tenφ z neexistujφcφho zßznamu (sqlstate '02000') je v²jimeΦnß tφm, ₧e handler pro nφ se musφ deklarovat p°i ka₧dΘm pou₧itφ konstrukce LOOP...FETCH...END LOOP, z°ejm∞ z tohoto d∙vodu mß tak v²sadnφ postavenφ.

Nastane-li p°i provßd∞nφ SQL p°φkaz∙ v²jimka, hledß se nejbli₧Üφ handler pro tuto v²jimku. Je-li n∞jak² handler nalezen, pak v zßvislosti na druhu handleru:

Handlery REDO a UNDO sm∞jφ b²t deklarovßny pouze v atomickΘm slo₧enΘm p°φkazu. Nelze v nich pou₧φvat transakΦnφ p°φkazy.

P°φklad pou₧itφ:

p°i pr∙chodu kurzoru je t°eba testovat existenci dalÜφho °ßdku

DECLARE CONTINUE HANDLER FOR NOT FOUND BEGIN SET err_notfound=TRUE; END;
LabelLoop: LOOP 
    FETCH NEXT FROM cur INTO TatoFirma, TatoHodnota; 
    IF err_notfound IS TRUE THEN LEAVE LabelLoop; END IF;
...