在最近刚刚举行的 DOAG 2022 会议上,Oracle 披露了 Oracle Database 23c 的一系列新特性。以下我将遴选10个有意思的特性,凑成一组速览和大家分享。

(1) 不带FROM子句的SELECT 查询

在Oracle 23c 中,第一次实现了不带From子句的查询,减少原来大量依赖Dual表的查询,可以松下了一口气:

(2) 单表支持4096列

我们知道 MogDB 单表最大支持 1600列,Oracle此前版本单表支持 1000列。
在23c中,单表支持列数量扩展到 4096 列。不过启用这一个特性需要将兼容性参数设置为23.0.0,同时将 Max_columns设置为 Extended:

alter system set MAX_COLUMNS=EXTENDED;

(3) SCHEMA级别的权限

在23c之前的版本,如果针对Schema对其他用户进行授权,需要通过系统权限或对象权限分别显式地授予,这对数据库带来了额外的安全风险或复杂性。
在Oracle 23中,可以对Schema进行授权,简化了之前的权限操作。

grant select any table on SCHMEA PROD to HR;

(4) Boolean数据类型

最终,在Oracle Database 23c中,布尔数据类型被支持。

(5) 基于别名的GROUP BY

终于,我们不再需要在Group By中重复长长的表达式,现在支持基于别名、位置的GROUP BY,这大大简化了SQL文本和编写,毕竟Group by如此常用、无处不在。

(6) Javascript存储过程

在Oracle 21c中引入的MLE支持了数据库内部的Javascript ,现在更进一步,23c实现javascript存储过程,让数据库内的处理能力进一步扩展和增强。

(7) SQL Domains

SQL域,域是特定类型数据元素的通用定义,例如名称、邮政编码、国家代码。这个通用定义可以有几个属性——例如格式(检查约束)、默认值、默认显示格式和按基于域的值排序时要使用的表达式。

在Oracle Database 23c中,域可以定义为数据库对象,并且在定义列时,可以将其链接到域定义,形成一个潜在元数据组。通过新函数DOMAIN_DISPLAY和DOMAIN_ORDER可以在查询语句中使用显示格式和 order by表达式。

(8) DDL的IF EXISTS判断

在DDL中,支持通过IF [NOT] EXISTS判断,从而规避执行过程中的错误、异常和中断。

(9) 注释

注释,为数据库对象增加元数据支持,可以针对表、视图、列、索引、PL/SQL 程序单元、物化视图、域增加注释。

(10) 标准的表值构建

一次产生多行记录,是基于ISO SQL标准的实现。