<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
	<id>http://postgres.cz/index.php?action=history&amp;feed=atom&amp;title=Exception_handling_and_signaling_in_SQL%2FPSM_samples</id>
	<title>Exception handling and signaling in SQL/PSM samples - Historie editací</title>
	<link rel="self" type="application/atom+xml" href="http://postgres.cz/index.php?action=history&amp;feed=atom&amp;title=Exception_handling_and_signaling_in_SQL%2FPSM_samples"/>
	<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=Exception_handling_and_signaling_in_SQL/PSM_samples&amp;action=history"/>
	<updated>2026-05-13T01:34:45Z</updated>
	<subtitle>Historie editací této stránky</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&amp;oldid=prev</id>
		<title>85.160.65.65: /* Signaling exception */</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&amp;oldid=prev"/>
		<updated>2007-01-05T15:01:58Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Signaling exception&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&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 &amp;#039;11111&amp;#039; &lt;br /&gt;
      SET MESSAGE_TEXT = &amp;#039;Pavel Stehule&amp;#039;,&lt;br /&gt;
          DETAIL       = &amp;#039;a bydlim ve Skalici&amp;#039;,&lt;br /&gt;
          HINT         = &amp;#039;obcas take nekde jinde&amp;#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 &amp;#039;42000&amp;#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&amp;#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 &amp;#039;00001&amp;#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 &amp;#039;01000&amp;#039;;&lt;br /&gt;
    DECLARE CONTINUE HANDLER FOR w PRINT &amp;#039;handler&amp;#039;;&lt;br /&gt;
    DROP TABLE IF EXISTS foo;&lt;br /&gt;
    CREATE TABLE foo(a integer);&lt;br /&gt;
    PRINT &amp;#039;A&amp;#039;;&lt;br /&gt;
    INSERT INTO foo VALUES(10);&lt;br /&gt;
    PRINT &amp;#039;B&amp;#039;;&lt;br /&gt;
    SIGNAL w;&lt;br /&gt;
    BEGIN ATOMIC&lt;br /&gt;
      DECLARE UNDO HANDLER FOR w PRINT &amp;#039;inner handler&amp;#039;;&lt;br /&gt;
      INSERT INTO foo VALUES(20);&lt;br /&gt;
      SIGNAL SQLSTATE &amp;#039;01000&amp;#039;;&lt;br /&gt;
      INSERT INTO foo VALUES(30);&lt;br /&gt;
    END;&lt;br /&gt;
    PRINT &amp;#039;C&amp;#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 &amp;#039;Not found&amp;#039;, SQLSTATE;&lt;br /&gt;
    DECLARE UNDO HANDLER FOR SQLSTATE &amp;#039;33333&amp;#039; PRINT &amp;#039;33333 handled&amp;#039;, SQLSTATE;&lt;br /&gt;
    SIGNAL SQLSTATE &amp;#039;02002&amp;#039;;&lt;br /&gt;
    PRINT SQLSTATE;&lt;br /&gt;
    SIGNAL SQLSTATE &amp;#039;33333&amp;#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 &amp;#039;something wrong&amp;#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 &amp;#039;any sql exception&amp;#039;, sqlstate;&lt;br /&gt;
    DECLARE CONTINUE HANDLER FOR SQLSTATE &amp;#039;33000&amp;#039; PRINT &amp;#039;class 33&amp;#039;, sqlstate;&lt;br /&gt;
    DECLARE CONTINUE HANDLER FOR SQLSTATE &amp;#039;33001&amp;#039; PRINT &amp;#039;exact sqlstate 33001&amp;#039;;&lt;br /&gt;
    SIGNAL SQLSTATE &amp;#039;33002&amp;#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>