Parametry
cdp | kontextová proměnná klienta |
level | hladina kontextu |
itype | typ vráceného kontextu |
par1 | vrácená základní část kontextu, obvykle číslo objektu, v němž došlo k chybě (absolutní číslo v systémové tabulce tabulek nebo objektů) |
par2 | vrácená dodatečná součást kontextu, je-li nějaká |
par3 | vrácená dodatečná součást kontextu, je-li nějaká |
par4 | vrácená dodatečná součást kontextu, je-li nějaká |
objname | jméno objektu z par1 (pouze v SQL); jedná-li se o objekt s lokální deklarací (např. lokální deklarace procedury), objeví se zde konstantní řetězec |
Od verze
7.0, SQL varianta od verze 8.1
Popis
Pokud je tato funkce volána po chybě, vrací informace o kontextu chyby. Podrobnosti o zjišťování detailů o poslední chybě z klientského prostředí naleznete zde. Více o popisu chyb a výjimek v SQL naleznete zde.
Vstupní parametr level určuje hladinu kontextu chyby, pro hodnotu 0 funkce vrací nejbližší kontext, pro vyšší hodnoty vzdálenější kontext. Pokud je hodnota level větší nebo rovna počtu definovaných hladin kontextu, bude v parametru itype vrácena hodnota 0, což indikuje, že vyšší hladiny není třeba zkoumat.
Typicky se tato funkce volá v cyklu opakovaně pro hodnoty level od 0 nahoru dokud nevrátí itype 0.
V parametru itype se vrací druh kontextu a podle tohoto druhu se interpretují i ostatní parametry:
itype | par1 | par2 | par3 | par4 |
1 - tabulka | číslo tabulky | číslo záznamu nebo -1 | číslo sloupce nebo 255 | číslo hodnoty multiatributu nebo 65535 |
2 - index | číslo tabulky | pořadové číslo indexu | -- | -- |
3 - procedura | číslo procedury | číslo řádky nebo -1 | -- | -- |
4 - trigger | číslo triggeru | číslo řádky nebo -1 | -- | -- |
5 - příkaz SQL | -- | -- | -- | -- |
6 - zámek | číslo tabulky nebo -1 | číslo záznamu nebo stránky | typ zámku | blokující uživatel |
7 - kompilace | -- | -- | -- | -- |
8 - záznam | číslo tabulky | číslo záznamu | -- | -- |
9 - indexový klíč | -- | -- | -- | -- |
0 - konec | -- | -- | -- | -- |
Významy parametrů, které jsou v tabulce označené --, jsou nedefinované a nemá smysl je interpretovat.
SQL varianta funkce lze volat nejen po chybě (tj. v příslušném handleru), ale i v kterémkoliv místě rutiny. Pak funkce nezjišťuje kontext chyby, ale může simulovat např. výpis zásobníku volání procedur a triggerů v okamžiku provedení - viz příklad.
Hodnota funkce
Funkce vrací FALSE v případě úspěchu, TRUE při chybě.
Příklad
PROCEDURE stack(); // vypíše stack rutin do logu BEGIN DECLARE level,tp,p1,p2,p3,p4 INT; DECLARE rutine_name CHAR(63); SET level=0; cycle: LOOP CALL Get_server_error_context(level, tp, p1, p2, p3, p4, rutine_name); IF tp=0 THEN LEAVE cycle; END IF; // konec IF tp=3 THEN // vypiš jméno procedury CALL Log_write('Procedure '+rutine_name); ELSEIF tp=4 then // vypiš jméno triggeru CALL Log_write('Trigger '+rutine_name); ELSE CALL Log_write('Other type '+CAST(tp AS CHAR(4))); END IF; SET level=level+1; END LOOP; END
Viz