http://postgres.cz/api.php?action=feedcontributions&user=85.160.78.222&feedformat=atomPostgreSQL - Příspěvky [cs]2024-03-29T14:17:49ZPříspěvkyMediaWiki 1.36.0http://postgres.cz/index.php?title=Signalizace_chyb&diff=233Signalizace chyb2007-02-18T08:36:56Z<p>85.160.78.222: /* Příkaz SIGNAL */</p>
<hr />
<div>===Příkaz SIGNAL===<br />
Tento příkaz slouží k signalizaci jedné určité události. Typ a význam události je určen SQLSTATE hodnotou, což je pětiznakový řetězec. Třída (první dva znaky) určují úroveň signálu. Rozlišujeme mezi třídami:<br />
{| {{prettytable}}<br />
|-<br />
| Třída || význam <br />
|-<br />
| 00 || úspěch<br />
|-<br />
| 01 || info<br />
|-<br />
| 02 || varování<br />
|-<br />
| xx || chyba<br />
|}<br />
<br />
Kromě hodnoty SQLSTATE můžeme určit ještě další atributy signálu (výjimky): message_text, pg_message_hint a pg_message_detail. Všechny nezachycené chybové signály se šíří do vnějšího složeného příkazu. Pokud signál není zachycen, pak dojde k přerušení provádění procedury. Signály třídy 00 nelze zachytit. Signály tříd 01 a 02 lze zachytit. Pokud nejsou zachyceny, tak se nešíří do vnějšího bloku ale přeposílají rovnou ke klientovi. Nezachycené signály s SQLSTATE 02000 jsou zachyceny předdefinovaným prázdným handlerem (signal NOT FOUND).<br />
<br />
''Syntaxe''<br />
<pre><br />
SIGNAL (SQLSTATE [VALUE] 'xxxxx'|deklarovaná podmínka) <br />
[(message_text|hint|detail) '=' retezec [, ...]]<br />
<br />
RESIGNAL [(SQLSTATE [VALUE] 'xxxxx'|deklarovaná podmínka)]<br />
[(message_text|hint|detail) '=' retezec [, ...]]<br />
</pre><br />
<br />
Příkaz RESIGNAL umožňuje odeslat zachycený originální případně modifikovaný signál. Tento příkaz lze použít pouze v těle handleru.</div>85.160.78.222http://postgres.cz/index.php?title=P%C5%99%C3%ADkaz_GET_DIAGNOSTICS&diff=238Příkaz GET DIAGNOSTICS2007-02-18T08:36:00Z<p>85.160.78.222: </p>
<hr />
<div>Tento příkaz je v SQL/PSM poměrně vágně definován a je celkem i dost odlišně implementován v různých databázích podporujících SQL/PSM. Částečně se od sebe odlišuje syntaxe, liší se i názvy některých diagnostických klíčů. V PL/pgPSM jsou definovány následující klíče: ROW_COUNT, RESULT_OID, RETURNED_SQLSTATE, MESSAGE_TEXT, MESSAGE_LENGTH, PG_MESSAGE_HINT, PG_MESSAGE_DETAIL, CONSTRAINT_NAME. Standard definuje další klíče (němluvě o dalších desitkách klíču v SQLPL), ty však nejsou poskytované jádrem PostgreSQL a proto nemohou být používány ani v PL/pgPSM.<br />
<br />
''Syntaxe''<br />
<pre><br />
GET [CURRENT|STACKED] DIAGNOSTICS [(CONDITION|EXCEPTION) hloubka] proměnná = klíč [,...];<br />
</pre><br />
<br />
Hodnoty přiřazené k jednotlivým klíčům jsou získávány z tzv. diagnostických oblastí (skupina klíčů). Pokud se aktivuje exception handler, dojde k uložení aktuální diagnostické oblasti na zásobník a k vytvoření její kopie, která se dále považuje za aktuální. Po opuštění těla handleru se oblast ze zásobníku vyvolá zpět. Provádění příkazů vždy ovlivňuje jen aktuální diagnostickou oblast. K uloženým oblastem má přístup jen příkaz GET STACKED DIAGNOSTICS. Tato technika umožňuje získat diagnostické informace o výjimce, která aktivovala handler i ve všech příkazech těla handleru (bez této techniky jsme museli proměnné přečíst prvním příkazem v těle handleru).</div>85.160.78.222