27.3.6.11 Объект SqlError
Когда возникает SqlError, в MySQL возникает ошибка, аналогично той, которая возникает при выполнении оператора SIGNAL. Вы можете создать SqlError с помощью конструктора, показанного здесь:
new SqlError(
sql_state: Number,
message: String,
error_number: Number
)
Хранимая процедура JavaScript в следующем примере пытается и вызывает SqlError, созданную с помощью этого конструктора. Вызов процедуры вызывает ошибку, как показано здесь:
mysql> 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 и error_number должны быть типа Number. MLE вызывает исключение, если любое из этих значений является Infinity или NaN.
Вы также можете вызвать SIGNAL из кода JavaScript-процедуры для вызова исключения, как показано здесь:
mysql> 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
© 2025 Oracle
Licensed under the GPLv2 License.