MySQL 9.2 Release Notes
When an SqlError
is thrown, an
error is raised in MySQL similar to how one is raised by a
SIGNAL
statement. You can create
an SqlError
using the constructor shown here:
Press CTRL+C to copynew SqlError( sql_state: Number, message: String, error_number: Number )
The JavaScript stored procedure in the following example tries
and throws an SqlError
created using this
constructor. Invoking the procedure raises the error, as can be
seen here:
Press CTRL+C to copymysql> CREATE PROCEDURE test_catch_throw_signal() LANGUAGE JAVASCRIPT -> AS $$ $> console.clear() $> try { $> throw new mysql.SQLError(45000, 'Some error', 1001) $> } catch (e) { $> console.log(e) $> } $> $$; Query OK, 0 rows affected (0.02 sec) mysql> CALL test_catch_throw_signal(); Query OK, 0 rows affected (0.04 sec) mysql> SELECT mle_session_state("stdout")\G *************************** 1. row *************************** org.graalvm.polyglot.nativeapi.PolyglotNativeAPI$CallbackException: SQL-CALLOUT: Error code: 1001 Error state: 45000 Error message: `Some error` 1 row in set (0.00 sec)
sql_state
and
error_number
must be of type
Number
. MLE throws an exception if either of
these values is Infinity
or
NaN
.
You can also invoke SIGNAL
from
JavaScript routine code to throw an exception, similar to what
is shown here:
Press CTRL+C to copymysql> CREATE PROCEDURE test_signal_no_catch() LANGUAGE JAVASCRIPT -> AS $$ $> console.clear() $> session.runSql("SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT= 'Some error', MYSQL_ERRNO = 1000") $> $$; Query OK, 0 rows affected (0.01 sec) mysql> CALL test_signal_no_catch(); ERROR 1000 (45000): Some error