Spec-Zone.ru › MySQL 9.2

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.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/srjsapi-sqlerror.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API