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 預存程式也可以將欄位值作為引數。可以在 SQL 表達式中任何可以合法使用任何其他函數的地方調用 JavaScript 預存函數,例如在 WHERE
、HAVING
、ORDER BY
和 JOIN
子句中。它們也可以在觸發程序或事件定義的主體中調用,儘管定義本身必須以 SQL 撰寫。這些功能的一些範例可以在本節稍後找到(請參閱 第 27.3.9 節,「JavaScript 預存程式範例」)。