|
![]() | Chyby a výjimky | Chyby a transakce | ![]() |
V níže uvedených tabulkách jsou chyby rozděleny podle toho, jak na ně server reaguje a zda je lze ošetřovat handlerem.
Řada chyb způsobuje rollback transakce. Pokud chyba vyvolávající rollback nastala uvnitř atomického bloku, pak se rollback vztahuje pouze na tento blok, stav databáze se tedy vrátí do stavu před vstupem do bloku.
Do této kategorie patří varování a informace o zvláštních situacích. Nevyžadují reakci a pokud nejsou nijak ošetřeny, nemají žádný vliv na provádění operací, nikdy nezpůsobují rollback. Klient se o jejich výskytu může dozvědět, pokud volá funkci Sz_warning.
Do této kategorie patří pouze jediná chyba, která signalizuje vyčerpání záznamů při procházení kurzoru. Tato chyba se zpravidla ošetřuje handlerem. Je-li ošetřena (viz příklad), pak transakce není odvolána a klient se o chybě nedozví. Není-li ošetřena handlerem, pak způsobí rollback transakce.
Identifikátor pro API | číslo | SQLSTATE | Popis |
NOT_FOUND_02000 | 139 | 02000 | Příkaz FETCH přesunul pozici v kurzoru na neexistující záznam |
Chyby v této kategorii signalizují, že určitá operace nemohla být povedena a že klient nedostane ze serveru normální odpověď. Tyto chyby nezpůsobují rollback transakce. Nedají se ošetřovat handlerem.
Identifikátor pro API | číslo | Popis |
OUT_OF_TABLE | 131 | číslo záznamu zadané ve funkci pro čtení nebo zápis je mimo rozsah záznamů v tabulce nebo kurzoru |
INTERNAL_SIGNAL | 184 | interní signál serveru pro klienta |
NOTHING_TO_REPL | 229 | replikace neproběhla protože není co replikovat - oznámení protější straně, proč nedošlo k replikaci |
CONVERSION_NOT_SUPPORTED | 226 | fulltextový engine neumí zkonvertovat zadaný text nebo nenalezl soubor k indexování - změna ve verzi 9.5 |
GERERR_FULLTEXT_CONV | 6005 | generická chyba od externího fulltextového konvertoru |
Do této kategorie patří chyby, po jejichž výskytu lze definovaným způsobem pokračovat v provádění operací. Dají se ošetřovat handlerem a jsou-li ošetřeny, pak se neprovede rollback, dosud provedené změny zůstanou v platnosti a z pohledu klienta k chybě nedošlo. Nejsou-li ošetřeny, způsobují rollback.
Identifikátor pro API | číslo | SQLSTATE | Popis |
THREAD_START_ERROR | 132 | W0132 | systém nespustil DETACHED rutinu |
OBJECT_DOES_NOT_EXIST | 137 | W0137 | SQL příkaz chce pracovat s objektem, který neexistuje |
CANNOT_CONVERT_DATA | 141 | W0141 | konverzi dat ve FETCH INTO nelze provést |
STRING_CONV_NOT_AVAIL | 185 | W0185 | konverze nebo porovnání řetězců neproběhlo, protože nejsou k dispozici příslušné kódové stránky; je-li zachycena handlerem, konverze vrátí NULL a porovnání je TRUE |
SQ_INVALID_CURSOR_STATE | 196 | 24000 | neplatný stav kurzoru, např. je již zavřen |
SQ_SAVEPOINT_INVAL_SPEC | 197 | 3B001 | neplatné označení savepointu |
SQ_TRANS_STATE_ACTIVE | 199 | 25001 | transakce je již zahájena |
SQ_INVAL_TRANS_TERM | 200 | 2D000 | nedovolené ukončení transakce v atomickém příkazu |
SQ_TRANS_STATE_RDONLY | 201 | 25006 | tato transakce nesmí modifikovat data |
SQ_NUM_VAL_OUT_OF_RANGE | 202 | 22003 | číselná hodnota mimo povolený rozsah (vyvolání závisí na nastavení kompatibility SQLOPT_MASK_NUM_RANGE) |
SQ_INV_CHAR_VAL_FOR_CAST | 203 | 22018 | nepřípustný znak znemožňuje konverzi typu (vyvolání závisí na nastavení kompatibility SQLOPT_MASK_INV_CHAR) |
SQ_STRING_DATA_RIGHT_TRU | 204 | 22001 | řetězec znaků je příliš dlouhý, seříznut zprava (vyvolání závisí na nastavení kompatibility SQLOPT_MASK_RIGHT_TRUNC) |
SQ_DIVISION_BY_ZERO | 205 | 22012 | dělení nulou v SQL příkazu |
SQ_CARDINALITY_VIOLATION | 206 | 21000 | odpověď dotazu (např. pro SELECT INTO) obsahuje jiný počet záznamů než jeden |
SQ_INVALID_ESCAPE_CHAR | 207 | 22019 | chyba v určení znaku ESCAPE v predikátu LIKE |
SQ_CASE_NOT_FOUND_STMT | 208 | 20000 | SQL příkaz CASE neobsahuje vhodnou větev |
SQ_RESIGNAL_HND_NOT_ACT | 210 | OK000 | příkaz RESIGNAL použit mimo ošetření výjimky |
SQ_EXT_ROUT_NOT_AVAIL | 211 | 38001 | externí rutina nebyla nalezena v zadané knihovně (DLL nebo so) |
SQ_NO_RETURN_IN_FNC | 212 | 2F001 | v SQL funkci nebyl proveden příkaz RETURN |
SQ_INVALID_CURSOR_NAME | 217 | 34000 | kurzor tohoto jména neexistuje |
LIBRARY_ACCESS_DISABLED | 223 | W0223 | volána externí funkce z nepovoleného adresáře (povoluje se vlastností Dir) |
LIBRARY_NOT_FOUND | 224 | W0224 | externí knihovna DLL nebo so nebyla nalezena |
WONT_RUN_AS_ROOT | 228 | W0228 | externí funkci nelze volat, pokud linuxový server běží pod účtem uživatele root |
SCHEMA_IS_OPEN | 236 | W0236 | nelze smazat aplikaci (schema), pokud je otevřena jiným klientem (vláknem) |
GENERR_DAD_DESIGN | 6000 | W6000 | chyba v návrhu DAD |
GENERR_XERCES_INIT | 6001 | W6001 | chyba při inicializaci knihoven xerces |
GERERR_DAD_PARSING | 6003 | W6003 | chyba při analýze XML struktury DAD |
Do této kategorie patří také všechny uživatelem definované výjimky, pokud nejsou sdruženy se sqlstate patřícím do jiné kategorie. Výjimky se aktivují příkazem SIGNAL nebo RESIGNAL a další postup je stejný jako při výskytu chyby.
Do této kategorie patří chyby, po jejichž výskytu nelze pokračovat v provádění operací a je nezbytné provést rollback. Je-li k dispozici handler, může provést dodatečné akce, ale nemůže zabránit rollbacku (handler se vykoná až po rollbacku).
Chyby z této kategorie se nehandlují uvnitř triggerů. Handler se v takovém případě ignoruje.
Identifikátor pro API | číslo | SQLSTATE | Popis |
NOT_LOCKED | 136 | W0136 | nelze zamknout záznam, protože s nim pracuje jiný klient |
MUST_NOT_BE_NULL | 160 | 40002 | pokus o zapsání hodnoty NULL do sloupce, který to nemá povoleno |
REFERENCED_BY_OTHER_OBJECT | 162 | W0162 | pokus zrušit tabulku nebo odstranit index z tabulky, na níž odkazuje jiná tabulka pomocí referenční integrity nebo odstranit doménu použitou v definici tabulky |
DEADLOCK | 171 | W0171 | deadlock, vzájemné zablokování klientů |
KEY_DUPLICITY | 172 | 40004 | duplicita klíčů v unikátním indexu |
CHECK_CONSTRAIN | 174 | 40005 | porušeno integritní omezení v tabulce |
REFERENTIAL_CONSTRAIN | 175 | 40006 | porušena referenční integrita mezi tabulkami |
TABLE_IS_FULL | 177 | W0177 | počet záznamů v tabulce přesáhl limit |
TOO_COMPLEX_TRANS | 183 | W0183 | příliš složitá transakce |
ASSERTION_FAILED | 195 | W0195 | interní chyba |
SQ_SAVEPOINT_TOO_MANY | 198 | 3B002 | překročen limit na počet savepointů nebo otevřených atomických bloků |
SEQUENCE_EXHAUSTED | 219 | W0219 | sekvence dosáhla maximální hodnoty a není zapnuto cyklování |
NO_CURRENT_VAL | 220 | W0220 | CURVAL bylo provedeno před NEXTVAL, není k dispozici |
OBJECT_VERSION_NOT_AVAILABLE | 230 | W0230 | požadovaná verze objektu již neexistuje |
GERERR_XML_PARSING | 6002 | W6002 | chyba při analýze XML dokumentu při importu |
Do této kategorie patří zejména chyby, po jejichž výskytu server nemůže pokračovat v operaci a nelze očekávat, že by handler mohl tuto situaci vyřešit. Nelze pro ně definovat handler. Provede se rollback transakce a klientovi se vrátí zpráva o chybě. Do této kategorie patří také signály o neošetřených výjimkách.
Identifikátor pro API | číslo | Popis |
OUT_OF_KERNEL_MEMORY | 145 | vyčerpána operační paměť na serveru |
UNREADABLE_BLOCK | 152 | nečitelný diskový blok - interní chyba |
OUT_OF_BLOCKS | 154 | vyčerpáno místo na disku, vážná chyba, která může poškodit databázový soubor. |
163-167 | interní chyby, obvykle poškození databázového souboru | |
TABLE_DAMAGED | 168 | databázová tabulka je vážně poškozená |
INDEX_DAMAGED | 191 | index je poškozen |
SQ_UNHANDLED_USER_EXCEPT | 209 | uživatelem definovaná výjimka není ošetřena |
SQ_TRIGGERED_ACTION | 214 | chyba v akci spuštěné triggerem |
FRAMES_EXHAUSTED | 232 | interní chyba, vyčerpány rámy pro diskové bloky |
Příčina a řešení těchto chyb leží mimo SQL. Většinou jde o nepovolené nebo nesprávně formulované požadavky klienta na server. Vznikají například během ladění aplikace využívající programové rozhraní serveru (API) v důsledku předání špatných parametrů do funkcí serveru. Každá taková chyba vyvolá rollback transakce, ukončení operace a vrácení informace o chybě klientovi. Na straně serveru je nelze ošetřovat žádným handlerem, klient může obsahovat jejich vhodné ošetření.
Identifikátor pro API | číslo | Popis |
BAD_MODIF | 128 | program se pokouší pracovat s multiatributy nebo se sloupci proměnné velikosti jako s normálními sloupci nebo naopak. |
NO_RIGHT | 129 | uživatel nemá dostatek práv na přístup k datům |
BAD_ELEM_NUM | 130 | neplatné číslo sloupce v tabulce nebo kurzoru |
CURSOR_MISUSE | 133 | neplatné číslo kurzoru (např. pokus o použití dosud neotevřeného, již zavřeného nebo cizího kurzoru) |
BAD_OPCODE | 134 | nedefinovaný požadavek klienta na server |
CANNOT_APPEND | 135 | kurzor neumožňuje tuto operaci (např. INSERT do JOINu nebo DELETE CURRENT OF na INSENSITIVE kurzor apod.) |
INDEX_OUT_OF_RANGE | 138 | index hodnoty multiatributu nebo počet hodnot je mimo rozsah daný definicí tabulky |
EMPTY | 140 | pokus o obnovení uvolněného záznamu nebo o zápis do něj |
BAD_PASSWORD | 142 | chybné heslo při přihlašování uživatele |
PTR_TO_DELETED | 143 | databázový ukazatel ukazuje na zrušený záznam |
NIL_PTR | 144 | databázový ukazatel nikam neukazuje |
RECORD_DOES_NOT_EXIST | 146 | pokus pracovat s neexistujícím záznamem |
IS_DELETED | 147 | práce se zrušeným záznamem v kurzoru nebo s již neexistující tabulkou |
INDEX_NOT_FOUND | 148 | index nenalezen |
OBJECT_NOT_FOUND | 149 | objekt v aplikaci nenalezen |
BAD_DATA_SIZE | 151 | klient předal serveru data nesprávné délky |
NOT_LOGGED_IN | 153 | klient se dosud úspěšně nepřihlásil na server |
REQUEST_BREAKED | 155 | operace byla během provádění zrušena klientem |
OS_FILE_ERROR | 157 | chyba při práci se souborem (může nastat u klienta nebo na serveru) |
INCOMPATIBLE_VERSION | 158 | nekompatibilita verzí souboru s daty (*.TDT) |
OPERATION_DISABLED | 161 | klient je přihlášen bez licence s omezenými možnostmi a snaží se provést nepovolenou operaci |
CANNOT_LOCK_KERNEL | 169 | nelze uzamknout server pro provedení operace, na server jsou připojení uživatelé |
ROLLBACK_IN_CURSOR_CREATION | 170 | uvnitř vytváření kurzoru byla provedena operace Rollback |
UNPROPER_TYPE | 176 | typ sloupce není vhodný pro požadovanou funkci |
ERROR_IN_FUNCTION_ARG | 180 | chyba v hodnotě argumentu API funkce |
NO_WRITE_TOKEN | 186 | nemám přepisovacího peška |
WAITING_FOR_ACKN | 187 | čekám na potvrzení předchozí replikace |
REPL_BLOCKED | 188 | replikace dosud nebyla odblokována protější stranou |
PASSWORD_EXPIRED | 192 | vypršela platnost hesla, nutno zadat nové |
NO_KEY_FOUND | 193 | nelze podepisovat, protože nemáte certifikovaný klíč |
DIFFERENT_KEY | 194 | nelze podepsat, použili jste nesprávný klíč |
COLUMN_NOT_EDITABLE | 213 | pokoušíte se přepsat sloupec dotazu, který není editovatelný |
REPLICATION_NOT_RUNNING | 215 | replikace není zapnuta |
ROLE_FROM_DIFF_APPL | 218 | pokoušíte se nastavovat práva k rolím z jiné aplikace (může nastat při sdílení back-endu nebo front-endu) |
NO_WWW_LICENCE | 221 | není zakoupená Internetová licence pro WWW přístup |
NO_MORE_INTRANET_LICS | 222 | málo intranet licencí, další klient odmítnut |
LANG_SUPP_NOT_AVAIL | 225 | pro fulltext není instalována podpora pro zvolený jazyk |
NO_FULLTEXT_LICENCE | 227 | SQL server nemá licenci pro fulltextový systém |
NO_REPL_UNIKEY | 231 | tabulka neobsahuje replikační klíč |
NO_CONF_RIGHT | 233 | uživatel nemá práva provozního správce a nemůže provést operaci |
NO_SECUR_RIGHT | 234 | uživatel nemá práva bezpečnostního správce a nemůže provést operaci |
ACCOUNT_DISABLED | 235 | uživatelský účet je zablokován správcem |
NO_XML_LICENCE | 238 | SQL server nemá licenci pro XML rozšíření |
Další skupina chyb stojí mimo transakční systém a neovlivňuje případné rozpracované transakce. Vznikají na straně klienta nebo na hranici mezi klientem a serverem. V ostatních směrech o nich platí totéž, co o předchozí kategorii chyb.
Identifikátor pro API | číslo | Popis |
NOT_ANSWERED | 255 | operace dosud není dokončena (při asynchronní komunikaci) |
OUT_OF_APPL_MEMORY | 150 | vyčerpání paměti na straně klienta |
CONNECTION_LOST | 156 | klient nemá spojení na server, buď server skončil nebo se rozpadlo síťové spojení |
REJECTED_BY_KERNEL | 159 | požadavek klienta nebude zpracován - zvláštní stav serveru, např. provádění Kontroly konzistence apod. |
BAD_VERSION | 173 | nesouhlasí číslo verze klienta a serveru |
REQUEST_NESTING | 178 | vnoření požadavku klienta na server - nový požadavek zaslán před dokončením předchozího |
CANNOT_FOR_ODBC | 179 | operace není proveditelná pro ODBC kurzor |
ODBC_CURSOR_NOT_OPEN | 181 | zadaný ODBC kurzor není otevřen |
DRIVER_NOT_CAPABLE | 182 | ODBC driver není schopen požadované operace |
BAD_TABLE_PROPERTIES | 190 | tabulka nemá potřebné vlastnosti |
ERROR_IN_FUNCTION_CALL | 237 | chyba při volání API funkce rozpoznaná na straně klienta |
![]() | Chyby a výjimky | Chyby a transakce | ![]() |