Get_server_error_context

c/c++pascal sql

BOOL Get_server_error_context(cdp_t cdp, int level, int * itype, int * par1, int * par2, int * par3, int * par4);
function Get_server_error_context(cdp : cdp_t; level : integer; var itype, par1, par2, par3, par4 : integer) : Boolean;
FUNCTION Get_server_error_context (IN level INT, OUT itype INT, OUT par1 INT, OUT par2 INT, OUT par3 INT, OUT par4 INT, OUT objname CHAR(63)) RETURNS BOOLEAN;

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 local routine

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