Spec-Zone.ru › MySQL 9.2

27.3.1 Создание и управление хранимыми программами JavaScript

Хранимая функция или хранимая процедура, написанная на JavaScript, создается, вызывается и поддерживается аналогично тем, которые написаны на SQL, с учетом перечисленных ниже различий:

  • Язык хранимой программы должен быть явно объявлен с помощью LANGUAGE JAVASCRIPT в операторе CREATE FUNCTION или CREATE PROCEDURE, используемом для создания хранимой программы; в противном случае MySQL предполагает, что целевой язык — SQL.

    Синтаксис тела процедуры проверяется во время создания; любые ошибки приводят к отклонению оператора CREATE и к тому, что хранимая программа не создается.

  • Тело программы должно быть обозначено ключевым словом AS и долларовыми разделителями, такими как $$, $js$, $mysql$ и так далее. Вы должны использовать тот же разделитель для обозначения начала и конца тела процедуры. Можно использовать кавычки для разграничения тела процедуры, но долларовые разделители предпочтительнее, поскольку это предотвращает проблемы с экранированием строк в коде функции или процедуры. После первого долларового разделителя приглашение клиента mysql меняется на $> для каждой новой строки в теле процедуры, пока не встретится закрывающийся доллар-разделитель, после чего приглашение возвращается к значению по умолчанию (обычно ->). Это можно увидеть в операторе CREATE FUNCTION, используемом для создания функции add_nos() ранее.

  • Необязательно указывать разделитель или терминатор операторов, как это делается для SQL-хранимых процедур. Если вы используете необязательный символ ; для разделения операторов JavaScript, это интерпретируется правильно как часть JavaScript-процедуры, а не как разделитель SQL-операторов, как показано здесь:

    mysql> CREATE FUNCTION js_pow(arg1 INT, arg2 INT)
        -> RETURNS INT LANGUAGE JAVASCRIPT
        -> AS
        ->   $$
        $>     let x = Math.pow(arg1, arg2);
        $>     return x;
        $>   $$
        -> ;
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> SELECT js_pow(2,3);
    +-------------+
    | js_pow(2,3) |
    +-------------+
    |           8 |
    +-------------+
    1 row in set (0.00 sec)
    

    Для уменьшения возможных разночтений, в последующих примерах этой секции разделитель ; не используется для каких-либо операторов JavaScript.

  • Текст тела процедуры всегда обрабатывается как utfmb4, независимо от используемой кодовой страницы. Это означает, что независимо от кодовой страницы, используемой клиентом для тела процедуры, сервер преобразует ее в utf8mb4 перед сохранением в словаре данных. Поскольку utf8mb4 охватывает все другие поддерживаемые кодовые страницы, это не должно быть проблемой.

    Имена аргументов и процедур программ JavaScript должны использовать кодовую страницу utfmb3, как и SQL-хранимые программы. См. Раздел 12.9, «Поддержка Unicode».

  • Ожидается, что строковые аргументы и типы возвращаемых значений будут utf8mb4; это означает, что если кодовая страница по умолчанию схемы, к которой относится хранимая JavaScript-программа, отличается, все ее аргументы должны быть явно объявлены как utf8mb4.

    Имена аргументов ввода должны соответствовать правилам идентификаторов JavaScript: они могут содержать буквы Unicode, $, _ и цифры (0-9), но не могут начинаться с цифры.

    Использование слова, зарезервированного в JavaScript (например, var или function) в качестве имени аргумента приводит к ошибке. Поскольку хранимые программы JavaScript MySQL всегда используют строгий режим, это также включает ключевые слова, такие как package и let. Полный список этих слов см. в Зарезервированные слова. Кроме того, ключевые слова mysql, console и graal также зарезервированы компонентом MLE и не могут использоваться в качестве имен переменных или аргументов в хранимых программах MySQL JavaScript.

  • Вы можете изменить хранимую JavaScript-программу, используя ALTER FUNCTION и ALTER PROCEDURE, как и SQL-хранимые функции или процедуры. Изменение языка с помощью ALTER не поддерживается; в таких случаях необходимо использовать DROP FUNCTION или DROP PROCEDURE (в зависимости от случая), а затем пересоздать хранимую программу с помощью соответствующего оператора CREATE.

Для получения списка всех хранимых JavaScript-программ во всех базах данных на сервере, запросите таблицу схемы Информации ROUTINES аналогично этому:

mysql> SELECT CONCAT(ROUTINE_SCHEMA, '.', ROUTINE_NAME) AS "JS Stored Routines"
    ->   FROM INFORMATION_SCHEMA.ROUTINES
    ->   WHERE EXTERNAL_LANGUAGE="JAVASCRIPT";
+------------------------+
| JS Stored Routines     |
+------------------------+
| test.pc1               |
| test.pc2               |
| world.jssp_simple1     |
| test.jssp_vsimple      |
| test.jssp_simple       |
| world.jssp_vsimple     |
| world.jssp_vsimple2    |
| world.jssp_simple_meta |
+------------------------+
8 rows in set (0.00 sec)

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/srjs-management.html

Spec-Zone.ru

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