slot deposit pulsa slot mahjong slot gacor slot gacor slot gacor resmi slot gacor 2025 slot gacor terpercaya slot gacor 2025 slot gacor hari ini slot gacor hari ini slot gacor hari ini
支持 JS 函数存储过程的 MySQL 预览版来了
17611538698
webmaster@21cto.com

支持 JS 函数存储过程的 MySQL 预览版来了

数据库 0 1245 2024-01-16 08:46:34

图片

Oracle 近日在新的 MySQL 8.2 预览版中增加了 JavaScript 存储过程。

当前,已经在企业版或 AWS、Azure 或 OCI(Oracle 云基础设施)上的 MySQL Heatwave 云服务中提供给用户使用。

其JavaScript 存储过程由 GraalVM 运行时执行,它支持 JavaScript 和 Java代码。

从使用 JavaScript 的开发人员数量而言,它是全球最流行的编程语言,但许多开发者对在数据库引擎中将 JavaScript 与 SQL 混合使用持谨慎态度。

图片

有开发者对此评论说:

“作为一个仍然从事 Java 存储过程工作的人,请Oracle不要这么干”。

因为混合语言可能会导致混乱,并引入诸如数据类型,还有如何从 JavaScript(动态语言)转换为 SQL(例如从函数返回时)之类的问题。

关于有多少编程逻辑属于数据库,而不是应用程序代码,也存在着长期的争论。在存储过程中运行代码有利于性能,因为它尽最大可能靠近数据运行,但与应用程序代码与数据库引擎分离时相比,此类代码不太明显,并且可能更难以排除故障与性能维护。

Oracle 表示说,JavaScript 存储过程和函数支持许多场景,还包括使用Mustache等模板系统进行数据格式化、复杂验证、数据压缩和编码以及数据转换。 

JavaScript 函数和过程是在 CREATE FUNCTION 或 CREATE PROCEDURE 语句中使用 LANGUAGE JAVASCRIPT 创建的。

创建后,可以在任何可以使用它们的地方以 SQL 语句调用它们,包括触发器(在插入、删除和更新之前或之后自动执行的代码)。JavaScript 的异常会转换为 MySQL 错误。

GraalVM 的 AOT(提前)编译增强了性能,如果语法错误将会让 CREATE 语句失败。

目前,此项功能的技术文档将其描述为技术预览版,并警告开发者“暂时不要在生产环境中使用这些二进制文件”。

它进一步说明 JavaScript 支持符合 ECMAScript 2021 规范。可以使用多语言引擎组件 (MLE) 进行调试,这是 JavaScript 支持所必需的,包括在发生错误时访问堆栈跟踪。

此外,文档中还有关于使用全局变量的警告:

“支持 Global 对象和 globalThis 对象属性,但它们的范围仅限于当前用户会话的范围。在同一会话中执行的多个存储程序(或同一程序的多个实例)时可以共享这些对象,但不建议这样做,因为它们在这种情况下的行为不是确定性的,”

评论