Oracle Database 23c 十小新特性速覽,你知道幾個?
在最近剛剛舉行的 DOAG 2022 會議上,Oracle 披露了 Oracle Database 23c 的一系列新特性。以下我將遴選10個有意思的特性,湊成一組速覽和大家分享。
1. 不帶FROM子句的SELECT 查詢
我們知道,在 MogDB 數(shù)據(jù)庫中,SELECT 是可以不跟 FROM 子句實現(xiàn)一系列的查詢功能,例如:
MogDB=#select 2^10;
?column?
----------
1024
(1 row)
MogDB=#select 9*9;
?column?
----------
81
(1 row)
在 Oracle 23c 中,第一次實現(xiàn)了不帶From子句的查詢,因而原來大量依賴 Dual 表的查詢,可以松下了一口氣:
2. 單表支持4096列
我們知道 MogDB 單表最大支持 1600 列,Oracle 此前版本單表支持 1000列。
在23c中,單表支持列數(shù)量擴展到 4096 列。啟用這一個特性需要將兼容性參數(shù)設(shè)置為23.0.0,同時將 Max_columns設(shè)置為 Extended:
alter system set MAX_COLUMNS=EXTENDED;
3. SCHEMA 級別的權(quán)限
在23c之前的版本,如果針對 Schema 對其他用戶進行授權(quán),需要通過系統(tǒng)權(quán)限 或 對象權(quán)限 分別顯示的授予,這對數(shù)據(jù)庫帶來了額外的安全風(fēng)險 或 復(fù)雜性。
在 Oracle 23 中,可以對 Schema 進行授權(quán),簡化了之前的全線操作:
grant select any table on SCHMEA PROD to HR;
4. Boolean 數(shù)據(jù)類型
最終,在 Oracle Database 23c 中,布爾數(shù)據(jù)類型被支持:
5. 基于別名的GROUP BY
終于,我們不再需要在 Group By 中重復(fù)長長的表達式,現(xiàn)在支持基于別名、位置的 GROUP BY,這大大簡化了SQL文本和編寫,畢竟 Group by 如此常用、無處不在:
6. Javascropt 存儲過程
在Oracle 21c中引入的 MLE 支持了數(shù)據(jù)庫內(nèi)部的Javascript ,現(xiàn)在更進一步,23c實現(xiàn) javascript 存儲過程,讓數(shù)據(jù)庫內(nèi)的處理能力進一步擴展和增強:
7. SQL Domains
SQL 域, 域是特定類型數(shù)據(jù)元素的通用定義,例如名稱、郵政編碼、國家代碼。這個通用定義可以有幾個屬性——例如格式(檢查約束)、默認值、默認顯示格式和按基于域的值排序時要使用的表達式。
在 Oracle Database 23c 中,域可以定義為數(shù)據(jù)庫對象,并且在定義列時,可以將其鏈接到域定義,形成一個潛在元數(shù)據(jù)組。通過新函數(shù) DOMAIN_DISPLAY 和 DOMAIN_ORDER 可以在查詢語句中使用顯示格式和 order by 表達式。
8. DDL的 IF EXISTS判斷
在DDL中,支持通過 IF [NOT] EXISTS 判斷,從而規(guī)避執(zhí)行過程中的錯誤、異常和中斷:
9. 注釋
注釋,為數(shù)據(jù)庫對象增加元數(shù)據(jù)支持,可以針對表、視圖、列、索引、PL/SQL 程序單元、物化視圖、域增加注釋。
10. 標準的表值構(gòu)建
一次產(chǎn)生多行記錄,是基于 ISO SQL 標準的實現(xiàn):