Propagate error conditions. This statement allows a handler to pass an error condition back to the caller or modify the error information before passing it on.
The syntax of RESIGNAL and its semantics are very similar to . This statement can only be used within an error . It produces an error, like . RESIGNAL clauses are the same as SIGNAL, except that they all are optional, even . All the properties which are not specified in RESIGNAL, will be identical to the properties of the error that was received by the error . For a description of the clauses, see .
RESIGNAL, without any clauses, produces an error which is identical to the error that was received by .
If used out of a construct, RESIGNAL produces the following error:
If a contains a to another procedure, that procedure can use RESIGNAL, but trying to do this raises the above error.
If a contains a to another procedure, that procedure can use RESIGNAL.
For a list of SQLSTATE values and MariaDB error codes, see .
The following procedure tries to query two tables which don't exist, producing a 1146 error in both cases. Those errors will trigger the . The first time the error will be ignored, and the client will not receive it, but the second time, the error is re-signaled, so the client will receive it.
The following procedure re-signals an error, modifying only the error message to clarify the cause of the problem.
This page is licensed: CC BY-SA / Gnu FDL
RESIGNAL [error_condition]
[SET error_property
[, error_property] ...]
error_condition:
SQLSTATE [VALUE] 'sqlstate_value'
| condition_name
error_property:
error_property_name = <error_property_value>
error_property_name:
CLASS_ORIGIN
| SUBCLASS_ORIGIN
| MESSAGE_TEXT
| MYSQL_ERRNO
| CONSTRAINT_CATALOG
| CONSTRAINT_SCHEMA
| CONSTRAINT_NAME
| CATALOG_NAME
| SCHEMA_NAME
| TABLE_NAME
| COLUMN_NAME
| CURSOR_NAMEERROR 1645 (0K000): RESIGNAL when handler not activeCREATE PROCEDURE test_error( )
BEGIN
DECLARE CONTINUE HANDLER
FOR 1146
BEGIN
IF @hide_errors IS FALSE THEN
RESIGNAL;
END IF;
END;
SET @hide_errors = TRUE;
SELECT 'Next error will be ignored' AS msg;
SELECT `c` FROM `temptab_one`;
SELECT 'Next error won''t be ignored' AS msg;
SET @hide_errors = FALSE;
SELECT `c` FROM `temptab_two`;
END;
CALL test_error( );
+----------------------------+
| msg |
+----------------------------+
| Next error will be ignored |
+----------------------------+
+-----------------------------+
| msg |
+-----------------------------+
| Next error won't be ignored |
+-----------------------------+
ERROR 1146 (42S02): Table 'test.temptab_two' doesn't existCREATE PROCEDURE test_error()
BEGIN
DECLARE CONTINUE HANDLER
FOR 1146
BEGIN
RESIGNAL SET
MESSAGE_TEXT = '`temptab` does not exist';
END;
SELECT `c` FROM `temptab`;
END;
CALL test_error( );
ERROR 1146 (42S02): `temptab` does not existCREATE PROCEDURE handle_error()
BEGIN
RESIGNAL;
END;
CREATE PROCEDURE p()
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION CALL p();
SIGNAL SQLSTATE '45000';
END;