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.