Norma SQL p°edepisuje, ₧e chybovΘ stavy a varovßnφ majφ b²t oznaΦovßny pomocφ tzv. sqlstates, co₧ jsou °et∞zce p∞ti znak∙ slo₧enΘ z Φφslic a velk²ch pφsmen latinskΘ abecedy. Norma pro °adu chyb p°edepisuje, kter² sqlstate mß p°i jejich v²skytu nastat. Mimo to ponechßvß prostor pro sqlstates definovanΘ implementacφ.
Ve 602SQL jsou chyby oznaΦovßny Φφslem. N∞kterΘ z t∞chto chyb odpovφdajφ n∞kterΘmu sqlstate, jinΘ jsou specifickΘ po 602SQL. Vzhledem k tomu, ₧e pro v∞tÜinu syntaktick²ch chyb a vÜechny chyby z nedostatku prßv existuje jedin² sqlstate, poskytujφ Φφsla chyb 602SQL detailn∞jÜφ rozliÜenφ.
Na sqlstates se v p°φkazech SQL odvolßvajφ deklarace v²jimek a handler∙. Chcete-li zachytit a zpracovat urΦitou chybu, musφte znßt jejφ sqlstate. Nφ₧e uvedenß tabulka specifikuje sqlstates odpovφdajφcφ jeden k jednΘ chybßm 602SQL. Ostatnφ (implementacφ definovanΘ) chyby se vyjad°ujφ pomocφ sqlstate ve tvaru öWabcdö, kde abcd je Φty°mφstnΘ Φφslo chyby, dopln∞nΘ v p°φpad∞ pot°eby zleva nulami. Nap°φklad chyb∞ 171(deadlock) odpovφdß sqlstate W0171. Pomocφ t∞chto v²jimek NELZE odchytit i chyby p°i kompilaci vlo₧enΘho SQL p°φkazu volanΘho pomocφ SQL_execute
.
Od verze 7 jsou v jazyce zavedeny systΘmovΘ prom∞nnΘ sqlstate
typu CHAR pro zjiÜt∞nφ hodnoty sqlstate a sqlcode
typu INT ve v²znamu Φφsla chyby 602SQL. Lze je vyu₧φt v handlerech pro podrobn∞jÜφ oÜet°enφ nebo logovßnφ chybov²ch stav∙.
Podrobn∞jÜφ rozd∞lenφ vÜech chyb do kategoriφ podle mo₧nosti reakce na jejich v²skyt lze nalΘzt zde.
Nßzev sqlstate | Φφslo chyby ve 602SQL | sqlstate |
Kurzor nelze nastavit na neexistujφcφ zßznam | 139 | 02000 |
PoruÜeno omezenφ tabulky (NOT NULL nebo UNIQUE nebo CHECK nebo referenΦnφ integrita) | 160,172,174,
175 |
40002 |
Neplatn² stav kurzoru | 196 | 24000 |
NeplatnΘ oznaΦenφ savepointu | 197 | 3B001 |
P°ekroΦen limit na poΦet savepoint∙ | 198 | 3B002 |
Transakce je ji₧ zahßjena | 199 | 25001 |
NedovolenΘ ukonΦenφ transakce v atomickΘm p°φkazu | 200 | 2D000 |
Tato transakce nesmφ modifikovat data | 201 | 25006 |
╚φselnß hodnota mimo povolen² rozsah | 202 | 22003 |
Nep°φpustn² znak znemo₧≥uje konverzi typu | 203 | 22018 |
╪et∞zec znak∙ je p°φliÜ dlouh² | 204 | 22001 |
D∞lenφ nulou | 205 | 22012 |
Odpov∞∩ obsahuje jin² poΦet zßznam∙ ne₧ jeden | 206 | 21000 |
Chyba v urΦenφ znaku ESCAPE | 207 | 22019 |
P°φkaz CASE neobsahuje vhodnou v∞tev | 208 | 20000 |
U₧ivatelem definovanß v²jimka nenφ oÜet°ena | 209 | 45000 |
P°φkaz RESIGNAL pou₧it mimo oÜet°enφ v²jimky | 210 | 0K000 |
Externφ rutina nebo knihovna nebyla nalezena | 211 | 38001 |
Ve funkci nebyl proveden p°φkaz RETURN | 212 | 2F001 |
Chyba v akci spuÜt∞nΘ triggerem | 214 | 09000 |
Kurzor tohoto jmΘna neexistuje | 217 | 34000 |
P°φklad pou₧itφ prom∞nnΘ sqlstate:
Obecn² handler pro vÜechny chyby
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
CALL log_write("Procedura ... - "||sqlstate||' '||Int2str(sqlcode));
END;