<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
	<id>http://postgres.cz/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=85.160.65.65</id>
	<title>PostgreSQL - Příspěvky [cs]</title>
	<link rel="self" type="application/atom+xml" href="http://postgres.cz/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=85.160.65.65"/>
	<link rel="alternate" type="text/html" href="http://postgres.cz/wiki/Speci%C3%A1ln%C3%AD:P%C5%99%C3%ADsp%C4%9Bvky/85.160.65.65"/>
	<updated>2026-09-15T12:40:34Z</updated>
	<subtitle>Příspěvky</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>http://postgres.cz/index.php?title=Exception_handling_and_signaling_in_SQL/PSM_samples&amp;diff=219</id>
		<title>Exception handling and signaling in SQL/PSM samples</title>
		<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=Exception_handling_and_signaling_in_SQL/PSM_samples&amp;diff=219"/>
		<updated>2007-01-05T15:01:58Z</updated>

		<summary type="html">&lt;p&gt;85.160.65.65: /* Signaling exception */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Signaling exception ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- signaling user exception completly parametrized&lt;br /&gt;
CREATE OR REPLACE FUNCTION fx()&lt;br /&gt;
RETURNS int AS &lt;br /&gt;
$$&lt;br /&gt;
  BEGIN&lt;br /&gt;
    SIGNAL SQLSTATE VALUE &#039;11111&#039; &lt;br /&gt;
      SET MESSAGE_TEXT = &#039;Pavel Stehule&#039;,&lt;br /&gt;
          DETAIL       = &#039;a bydlim ve Skalici&#039;,&lt;br /&gt;
          HINT         = &#039;obcas take nekde jinde&#039;;&lt;br /&gt;
    RETURN 1;&lt;br /&gt;
 END;&lt;br /&gt;
$$ LANGUAGE plpgpsm;&lt;br /&gt;
&lt;br /&gt;
-- signaling knowned exception without additional parameters&lt;br /&gt;
CREATE OR REPLACE FUNCTION fx()&lt;br /&gt;
RETURNS int AS &lt;br /&gt;
$$&lt;br /&gt;
  BEGIN&lt;br /&gt;
    SIGNAL SQLSTATE VALUE &#039;42000&#039;;&lt;br /&gt;
    RETURN 1;&lt;br /&gt;
  END;&lt;br /&gt;
$$ LANGUAGE plpgpsm;&lt;br /&gt;
&lt;br /&gt;
-- signaling exception via conditional&#039;s name&lt;br /&gt;
CREATE OR REPLACE FUNCTION fx()&lt;br /&gt;
RETURNS int AS &lt;br /&gt;
$$&lt;br /&gt;
  BEGIN&lt;br /&gt;
    DECLARE my_condition CONDITION FOR SQLSTATE VALUE &#039;00001&#039;;&lt;br /&gt;
    SIGNAL my_condition;&lt;br /&gt;
    RETURN 1;&lt;br /&gt;
  END;&lt;br /&gt;
$$ LANGUAGE plpgpsm;&lt;br /&gt;
&lt;br /&gt;
-- handling warnings, undo handler&lt;br /&gt;
CREATE OR REPLACE FUNCTION fx()&lt;br /&gt;
RETURNS void AS&lt;br /&gt;
$$&lt;br /&gt;
BEGIN&lt;br /&gt;
  BEGIN                         &lt;br /&gt;
    DECLARE w CONDITION FOR SQLSTATE &#039;01000&#039;;&lt;br /&gt;
    DECLARE CONTINUE HANDLER FOR w PRINT &#039;handler&#039;;&lt;br /&gt;
    DROP TABLE IF EXISTS foo;&lt;br /&gt;
    CREATE TABLE foo(a integer);&lt;br /&gt;
    PRINT &#039;A&#039;;&lt;br /&gt;
    INSERT INTO foo VALUES(10);&lt;br /&gt;
    PRINT &#039;B&#039;;&lt;br /&gt;
    SIGNAL w;&lt;br /&gt;
    BEGIN ATOMIC&lt;br /&gt;
      DECLARE UNDO HANDLER FOR w PRINT &#039;inner handler&#039;;&lt;br /&gt;
      INSERT INTO foo VALUES(20);&lt;br /&gt;
      SIGNAL SQLSTATE &#039;01000&#039;;&lt;br /&gt;
      INSERT INTO foo VALUES(30);&lt;br /&gt;
    END;&lt;br /&gt;
    PRINT &#039;C&#039;;&lt;br /&gt;
  END;&lt;br /&gt;
END;&lt;br /&gt;
$$ LANGUAGE plpgpsm;&lt;br /&gt;
&lt;br /&gt;
-- using SQLSTATE variable&lt;br /&gt;
CREATE OR REPLACE FUNCTION fog() &lt;br /&gt;
RETURNS void AS &lt;br /&gt;
$$&lt;br /&gt;
  BEGIN ATOMIC&lt;br /&gt;
    DECLARE SQLSTATE char(5);&lt;br /&gt;
    DECLARE CONTINUE HANDLER FOR NOT FOUND PRINT &#039;Not found&#039;, SQLSTATE;&lt;br /&gt;
    DECLARE UNDO HANDLER FOR SQLSTATE &#039;33333&#039; PRINT &#039;33333 handled&#039;, SQLSTATE;&lt;br /&gt;
    SIGNAL SQLSTATE &#039;02002&#039;;&lt;br /&gt;
    PRINT SQLSTATE;&lt;br /&gt;
    SIGNAL SQLSTATE &#039;33333&#039;;&lt;br /&gt;
    PRINT SQLSTATE; -- no sence&lt;br /&gt;
  END;&lt;br /&gt;
$$ LANGUAGE plpgpsm;&lt;br /&gt;
&lt;br /&gt;
-- next sample of SQLSTATE&lt;br /&gt;
CREATE OR REPLACE FUNCTION foo(OUT SQLSTATE char(5)) AS &lt;br /&gt;
$$&lt;br /&gt;
  CASE 1 WHEN 0 THEN PRINT &#039;something wrong&#039;; END CASE;&lt;br /&gt;
$$ LANGUAGE plpgpsm;&lt;br /&gt;
&lt;br /&gt;
-- order specific handler (SQLSTATE, SQLCLASS) before and general handler&lt;br /&gt;
CREATE OR REPLACE FUNCTION foo()&lt;br /&gt;
RETURNS void AS&lt;br /&gt;
$$&lt;br /&gt;
  BEGIN&lt;br /&gt;
    DECLARE sqlstate char(5);&lt;br /&gt;
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION PRINT &#039;any sql exception&#039;, sqlstate;&lt;br /&gt;
    DECLARE CONTINUE HANDLER FOR SQLSTATE &#039;33000&#039; PRINT &#039;class 33&#039;, sqlstate;&lt;br /&gt;
    DECLARE CONTINUE HANDLER FOR SQLSTATE &#039;33001&#039; PRINT &#039;exact sqlstate 33001&#039;;&lt;br /&gt;
    SIGNAL SQLSTATE &#039;33002&#039;;&lt;br /&gt;
  END;&lt;br /&gt;
$$ LANGUAGE plpgpsm;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For level NOTICE use PRINT stmt. For SQLSTATE 01xxx and 02xxx use WARNING and for others without 00xxxx (INFO) use ERROR (fully compliant).&lt;/div&gt;</summary>
		<author><name>85.160.65.65</name></author>
	</entry>
</feed>