基于Philipp Salvisberg 引人入胜的 Twitter 帖子,其中包括 Gerald Venzl 在 DOAG 2022 上的演讲,我想提一下显然将成为 Oracle Database 23c 一部分的一些特性——新的长期支持版本(继 19c 之后)测试期从 2022 年 10 月开始,到 2023 年 2 月结束。很快我们就可以开始使用这些功能,不久之后我们就可以开始真正使用它们了。请注意,Oracle Database 23c 将得到长期支持(一直到 2028 年,并且扩展支持已经预计到 2031 年)。
一些新功能似乎总是那么明显,但从未发生过。到现在。
1. Select without from – 如果您要选择的内容不是来自表格,则无需使用 DUAL 假装它来自表格。
好吧,这个不会让你保持清醒,但它很好,是吗?
2. 在 GROUP BY 和 HAVING 中使用列别名——一个长期存在的挫折:如果你想按列表达式分组,你不能简单地使用列别名(就像你可以在 ORDER BY 中那样),但你必须输入(没有错别字请)相同的列表达式。在 23c 中,我们将能够简单地使用列别名!
3. 使用 IF EXISTS 和 IF NOT EXIST(S?) 测试 DDL 语句中的对象是否存在——当你的 DDL 语句执行时出现看似错误的情况并不优雅——但可能是无害的——当你尝试删除的对象时不存在(这很好)或您尝试创建的对象已经存在(这也可能很好)。在 DDL 语句中使用新的 IF EXISTS 和 IF NOT EXIST(S?) 子句,您可以提前应对这些情况。
4. 表值构造器——允许在单个 DML 或 SELECT 语句中对多行数据进行分组。
此运算符是 ISO SQL 标准的一部分。它似乎与 TABLE 函数有关——除了它不包含函数调用,而是包含多行的硬编码值。有关更多详细信息,请参阅这篇关于 TVC(在 SQL Server 中)的文章
5. 为 MERGE 语句返回子句并为 UPDATE 返回 OLD 列值
执行 DML 语句后,可以将最终结果返回给客户端(例如 PL/SQL 客户端)。但是,直到现在 RETURNING 不可用于 MERGE,它仅在执行 UPDATE 后返回新值。从 23c 开始,我们可以使用OLD column_name表达式来获取原始列的值。
6. 更好的错误信息来解释为什么一个语句执行失败
不知道改进了多少消息。这个例子至少是一个有价值的例子。图片中的人是甲骨文的产品经理 Gerald Venzl,人非常好。
7. 注释——定义数据库对象的元数据
听起来很有用。我认为超出了数据库注释的内容。我还不清楚这个功能究竟意味着什么。表、视图、列、索引、PL/SQL 程序单元、物化视图、域支持注释
8. 开发者角色——快速为用户提供数据库开发的有用权限
而不是授予连接,资源给<开发者用户>
9. JavaScript 存储过程——基于 MLE(由 GraalVM 提供支持的多语言引擎),我们现在可以定义用 JavaScript 编写的存储过程。我很好奇这意味着我们可以定义可以相互导入的更大的 JavaScript 模块,以及我们是否可以使用预安装的 JavaScript/Node 模块甚至导入 npm 模块。
10. SQL 域——域的概念对于曾经使用 Oracle Designer 进行 ERD 和/或数据库设计的任何人来说都非常熟悉。域是特定类型数据元素的通用定义,例如名称、邮政编码、国家代码。这个通用定义可以有几个属性——例如格式(检查约束)、默认值、默认显示格式和按基于域的值排序时要使用的表达式。
在 Oracle Database 23c 中,域可以定义为数据库对象(如下所示),并且在定义列时,可以将其链接到域定义。这是一个潜在有用的元数据。但不仅如此:针对域定义的检查约束由列继承。通过新函数 DOMAIN_DISPLAY 和 DOMAIN_ORDER 可以在查询语句中使用显示格式和 order by 表达式。
11. 根据加入条件更新记录——例如更新在具有特定名称的部门工作的所有员工。这种语法允许以更优雅的方式编写原本必须使用内联视图或更繁琐的地方来完成的操作。
FROM 和 WHERE 子句可以扩展到多个表吗?为什么这里不使用 JOIN 子句?是否支持外连接?
12、Schema Level Privileges——能够在单个语句中授予对模式中所有对象的访问权限
例如 GRANT SELECT ANY TABLE ON SCHEMA <SCOTT> TO <SOME USER>
13. JSON Schema——根据 JSON Schema 定义验证文档的各种选项。JSON Schema 可以在表列上定义——几乎作为检查约束。它可以在查询中使用以仅选择满足架构的值,并使用包 dbms_json_schema 可以针对 JSON 架构检索特定值的验证报告。
14. 显然——我不知道谁真正需要这个——在 23c 中,我们可以在一个表中定义 4096 列。如果您需要,您可能需要重新考虑您的桌子设计。
最后: BOOLEAN 数据类型用于列定义并在 SQL 语句中使用。我们可以定义一个数据类型为 BOOLEAN 的列,并在 WHERE 子句中测试布尔值(仅使用 WHERE <boolean column> - 而不是 WHERE <boolean column> = TRUE)。我很想知道其他 SQL 函数将如何处理布尔值。
此列表中的一些我尚未详细讨论的功能:
- Oracle 数据库 <=> Kafka 集成
- OAuth 2.0 集成
- PL/SQL <=> SQL 转译器(我很好奇那个)
参考资料:
似乎 Oracle 23c 附带了大量有用的新特性供我们支持。可以在此处查看列表(Gerald Venzl 的 twitter):
https ://twitter.com/phsalvisberg/status/1572885995070300160
如果可用,将提供更权威的列表。从上面的推文:
- 域名:https ://twitter.com/phsalvisberg/status/1572886004792426504
BOOLEAN
类型:https ://twitter.com/phsalvisberg/status/1572886018239627264UPDATE .. FROM
:https ://twitter.com/phsalvisberg/status/1572886022379245569IF [ NOT ] EXISTS
:https ://twitter.com/phsalvisberg/status/1572886032722305025GROUP BY <position>
:https ://twitter.com/phsalvisberg/status/1572886037428322304- 表值构造函数:https ://twitter.com/phsalvisberg/status/1572886041878728704
RETURNING
改进:https ://twitter.com/phsalvisberg/status/1572886046580576258SELECT
没有FROM
:https ://twitter.com/phsalvisberg/status/1572886055023513601
原文标题:Oracle Database 23c–new feature highlights (release February 2023?)
原文作者:Lucas Jellema
原文链接:https://technology.amis.nl/database/oracle-database-23c-new-feature-highlights-release-february-2023/