MySQL 9.0 发行说明
MySQL 9.0 支持使用 JavaScript 编写的存储例程,如下面的简单示例所示
mysql> CREATE FUNCTION add_nos(arg1 INT, arg2 INT)
-> RETURNS INT LANGUAGE JAVASCRIPT AS
-> $$
$> return arg1 + arg2
$> $$
-> ;
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT add_nos(12,52);
+----------------+
| add_nos(12,52) |
+----------------+
| 64 |
+----------------+
1 row in set (0.00 sec)
注意
支持 JavaScript 存储例程需要安装多语言引擎 (MLE) 组件。有关安装和配置 MLE 组件的信息,请参阅 第 7.5.6 节“多语言引擎组件 (MLE)”。
JavaScript 存储程序可以与其他用户创建的和 MySQL 原生的存储程序一起使用(受本节其他地方描述的限制),也可以与 MySQL 系统和用户变量一起使用。我们可以在此处看到其中的一些内容,使用在前面的示例中创建的 add_nos()
函数
mysql> SET @x = 2;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @x;
+------+
| @x |
+------+
| 2 |
+------+
1 row in set (0.00 sec)
mysql> SELECT @@server_id;
+-------------+
| @@server_id |
+-------------+
| 1 |
+-------------+
1 row in set (0.00 sec)
mysql> SELECT add_nos(POW(2,@x), 1);
+-----------------------+
| add_nos(POW(2,@x), 1) |
+-----------------------+
| 5 |
+-----------------------+
1 row in set (0.01 sec)
mysql> SELECT POW(add_nos(@x, @@server_id), add_nos(@x, 1));
+-----------------------------------------------+
| POW(add_nos(@x, @@server_id), add_nos(@x, 1)) |
+-----------------------------------------------+
| 27 |
+-----------------------------------------------+
1 row in set (0.01 sec)
可以使用 CALL
调用 JavaScript 存储过程,与 SQL 存储过程一样。
JavaScript 存储程序也可以将列值作为参数。JavaScript 存储函数可以在 SQL 表达式中任何可以使用其他函数的地方调用,例如 WHERE
、HAVING
、ORDER BY
和 JOIN
子句。它们也可以在触发器或事件定义的主体内调用,尽管定义本身必须用 SQL 编写。本节后面将提供一些这些功能的示例(请参阅 第 27.3.9 节“JavaScript 存储程序示例”)。