RESIGNAL statement

The RESIGNAL statement is used within a handler to return an error or warning condition.

Syntax

Click to skip syntax diagram
Read syntax diagramSkip visual syntax diagram>>-+--------+-RESIGNAL------------------------------------------>
   '-label:-'
 
>--+-------------------------------------------------------------------------------+-><
   |             .-VALUE-.                                                         |
   '-+-SQLSTATE--+-------+--+-sqlstate-string-constant-+-+--+--------------------+-'
     |                      '-sqlstate-string-variable-' |  '-signal-information-'
     '-condition-name------------------------------------'
 
signal-information:
 
|--SET--+-MESSAGE_TEXT-------+-- = --+-SQL-variable-name----------+--|
        +-CONSTRAINT_CATALOG-+       +-SQL-parameter-name---------+
        +-CONSTRAINT_SCHEMA--+       '-diagnostic-string-constant-'
        +-CONSTRAINT_NAME----+
        +-CATALOG_NAME-------+
        +-SCHEMA_NAME--------+
        +-TABLE_NAME---------+
        +-COLUMN_NAME--------+
        +-CURSOR_NAME--------+
        +-CLASS_ORIGIN-------+
        '-SUBCLASS_ORIGIN----'
 

Description

label
Specifies the label for the RESIGNAL statement. The label name cannot be the same as another label within the same scope. For more information, see Labels.
SQLSTATE VALUE
Specifies the SQLSTATE that will be signalled. The specified value must follow the rules for SQLSTATEs:

If the SQLSTATE does not conform to these rules, an error is returned.

sqlstate-string-constant
The sqlstate-string-constant must be a character string constant with exactly 5 characters.
sqlstate-string-variable
The sqlstate-string-variable must be a character, UTF-16 graphic, or UCS-2 graphic variable. The actual length of the contents of the sqlstate-string-variable must be 5.
condition-name
Specifies the name of the condition that will be returned. The condition-name must be declared within the compound statement.
SET
Introduces the assignment of values to condition-information-items. The condition-information-item values can be accessed using the GET DIAGNOSTICS statement. The only condition-information-item that can be accessed in the SQLCA is MESSAGE_TEXT.
MESSAGE_TEXT
Specifies a string that describes the error or warning.

If an SQLCA is used,

  • the string is returned in the SQLERRMC field of the SQLCA
  • if the actual length of the string is longer than 70 bytes, it is truncated without a warning.
CONSTRAINT_CATALOG
Specifies a string that indicates the name of the database that contains a constraint related to the signalled error or warning.
CONSTRAINT_SCHEMA
Specifies a string that indicates the name of the schema that contains a constraint related to the signalled error or warning.
CONSTRAINT_NAME
Specifies a string that indicates the name of a constraint related to the signalled error or warning.
CATALOG_NAME
Specifies a string that indicates the name of the database that contains a table or view related to the signalled error or warning.
SCHEMA_NAME
Specifies a string that indicates the name of the schema that contains a table or view related to the signalled error or warning.
TABLE_NAME
Specifies a string that indicates the name of a table or view related to the signalled error or warning.
COLUMN_NAME
Specifies a string that indicates the name of a column in the table or view related to the signalled error or warning.
CURSOR_NAME
Specifies a string that indicates the name of a cursor related to the signalled error or warning.
CLASS_ORIGIN
Specifies a string that indicates the origin of the SQLSTATE class related to the signalled error or warning.
SUBCLASS_ORIGIN
Specifies a string that indicates the origin of the SQLSTATE subclass related to the signalled error or warning.
SQL-variable-name
Identifies an SQL variable declared within the compound-statement, that contains the value to be assigned to the condition-information-item. The SQL variable must be defined as CHAR, VARCHAR, UTF-16 or UCS-2 GRAPHIC, or UTF-16 or UCS-2 VARGRAPHIC variable.
SQL-parameter-name
Identifies an SQL parameter declared within the compound-statement, that contains the value to be assigned to the condition-information-item. The SQL parameter must be defined as CHAR, VARCHAR, UTF-16 or UCS-2 GRAPHIC, or UTF-16 or UCS-2 VARGRAPHIC variable.
diagnostic-string-constant
Specifies a character string constant that contains the value to be assigned to the condition-information-item.

Notes

SQLSTATE values: Any valid SQLSTATE value can be used in the RESIGNAL statement. However, it is recommended that programmers define new SQLSTATEs based on ranges reserved for applications. This prevents the unintentional use of an SQLSTATE value that might be defined by the database manager in a future release.

SQLSTATE values are comprised of a two-character class code value, followed by a three-character subclass code value. Class code values represent classes of successful and unsuccessful execution conditions.

For more information about SQLSTATEs, see the SQL Messages and Codes book in the iSeries Information Center.

Assignment: When the RESIGNAL statement is executed, the value of each of the specified string-constants and variables is assigned (using storage assignment rules) to the corresponding condition-information-item. For details on the assignment rules, see Assignments and comparisons. For details on the maximum length of specific condition-information-items, see GET DIAGNOSTICS.

Processing a RESIGNAL statement:

If the SQLSTATE or condition indicates that an exception is signalled (SQLSTATE class other than '01' or '02'):,

If the SQLSTATE or condition indicates that a warning (SQLSTATE class '01') or not found (SQLSTATE class '02') is signalled:

Example

This example detects a division by zero error. The IF statement uses a SIGNAL statement to invoke the overflow condition handler. The condition handler uses a RESIGNAL statement to return a different SQLSTATE value to the client application.

CREATE PROCEDURE divide ( IN numerator INTEGER,
 	                        IN denominator INTEGER, 
	                          OUT divide_result INTEGER )
  LANGUAGE SQL
    BEGIN
       DECLARE overflow CONDITION FOR '22003';
       DECLARE CONTINUE HANDLER FOR overflow 
           RESIGNAL SQLSTATE '22375';
       IF denominator = 0 THEN
           SIGNAL overflow;
       ELSE
           SET divide_result = numerator / denominator;
       END IF;
     END
 


[ Top of Page | Previous Page | Next Page | Contents | Index ]