Spec-Zone.ru › MySQL 9.2

27.3.10 Ограничения и условия использования JavaScript хранимых программ

Хранимые программы MySQL на JavaScript подчиняются ограничениям и условиям, описанным в этом разделе.

Объект Global и свойство объекта globalThis поддерживаются, но их область действия ограничена текущей процедурой. Например, если заданная JavaScript программа устанавливает значение globalThis.myProp = 10 в рамках JavaScript программы, это значение недоступно другим JavaScript программам, даже в рамках одной сессии, и обращение к значению globalThis.myProp в последующих вызовах той же JavaScript программы не даёт одинаковое значение.

Переменная JavaScript, локальная или глобальная, определённая в одной хранимой программе, недоступна из других соединений, выполняющих ту же программу.

Доступ к файлам и сети из кода хранимых программ на JavaScript не поддерживается. Хранимые программы JavaScript в MySQL не предусматривают использование сторонних модулей; по этой причине оператор import не поддерживается. Кроме того, нет поддержки Node.js.

Компонент MLE использует однопоточную модель выполнения. Это означает, что все асинхронные функции, такие как объект JavaScript Promise и функции async, моделируются и могут демонстрировать непредсказуемое поведение.

Как и в случае со SQL хранимыми процедурами, хранимые процедуры JavaScript с переменным числом аргументов не поддерживаются; каждый аргумент и его тип должны быть указаны во время создания. Функции JavaScript внутри процедур могут иметь переменное число аргументов.

Можно вызывать другие хранимые программы из тела JavaScript хранимой программы, а также вызывать JavaScript хранимую программу из SQL хранимых программ, включая хранимые процедуры, хранимые функции, события и триггеры, как показано в другом месте (см. Раздел 27.3.11, «Примеры JavaScript хранимых программ»). Хранимые программы JavaScript также могут вызывать себя рекурсивно; внутри JavaScript хранимой программы можно рекурсивно вызывать чистую JavaScript функцию или метод, как показано здесь:

mysql> CREATE FUNCTION recursive_sum(my_num INT)
    ->   RETURNS INT NO SQL LANGUAGE JAVASCRIPT AS
    -> $$
    $>   function sum(n) {
    $>     if(n <= 1) return n
    $>     else return n + sum(--n)
    $>   }
    $>
    $>   let x = sum(my_num)
    $>   return x
    $> $$
    -> ;
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT recursive_sum(1), recursive_sum(2),
    ->        recursive_sum(20), recursive_sum(100)\G
*************************** 1. row ***************************
  recursive_sum(1): 1
  recursive_sum(2): 3
 recursive_sum(20): 210
recursive_sum(100): 5050
1 row in set (0.00 sec)

Глубина рекурсии ограничена 1000. Чрезмерная рекурсия может привести к сбою программы, как в этом примере:

mysql> SELECT recursive_sum(1000);
ERROR 6113 (HY000): JavaScript> Maximum frame limit of 1000 exceeded. Frames on stack: 1001.

Хранимые программы JavaScript поддерживаются MySQL Replication при условии, что компонент MLE установлен на каждом сервере в топологии. Для получения дополнительной информации см. Раздел 19.5.1.18, «Репликация и JavaScript хранимые программы».

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

Spec-Zone.ru

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