暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle 23c新功能一览及部分特性测试

原创 刘贵宾 2023-04-14
2800

Oracle Database 23c 提供了 300+ 新特性和增强功能,本文给大家做一个简要的介绍,主要涉及开发者相关的功能。


JSON关系对偶

数据可以透明地访问和更新为JSON文档或关系表。

开发人员受益于两者的优势,这些优势比对象关系映射(ORM)更简单、更强大。

参见JSON-关系对偶

操作属性图

开发人员现在可以利用其行业领先的安全性、高可用性和性能能力,直接在甲骨文数据库中根据操作数据构建实时图形分析应用程序。

请参阅属性图:甲骨文数据库中图形的本机表示

微服务支持

除了甲骨文已经对微服务的全面支持外,新功能使实施跨服务事务变得更加简单。

参见微服务

无锁列值预订

无锁列值保留允许应用程序保留列中部分值,而无需锁定该行;例如,保留部分银行账户余额或在库存中保留项目,而无需锁定银行账户或项目的所有其他操作。

请参阅无锁预订

OKafka

Kafka应用程序现在可以直接对Oracle数据库运行,只需最小的代码更改,利用高性能事务事件队列(TxEventQ)。

请参阅OKafka(甲骨文的Kafka实现)。

JavaScript存储过程

开发人员现在可以在数据库中使用JavaScript创建存储过程。此功能还允许开发人员利用大量的JavaScript库。

请参阅JSON数据类型的多语言引擎JavaScript支持

SQL域

SQL域允许开发人员以集中和轻量化的方式声明数据(列)的预期用途。例如,声明一列包含电子邮件、URL、密码、货币等。应用程序可以使用SQL域自动生成代码或验证值。

参见SQL域

许多数据类型和SQL增强功能

以下是许多数据类型和SQL增强功能:

每张表最多4096列

数据库表现在支持多达4096列。此功能简化了需要大量属性的应用程序的开发,例如ML和物联网。

请参阅增加列限制

改进的机器学习算法

Oracle数据库内机器学习算法的新改进使文本和数据的分类更简单,同时提供更好的性能和灵活性。

参见机器学习

模式特权

现在可以在模式级别授予系统特权。此功能简化了特权管理过程,因此可以轻松保护数据库。

请参阅简化访问控制的模式特权

开发人员角色

新角色允许管理员仅为开发人员设计、构建和部署Oracle数据库所需的权限快速分配开发人员。

请参阅应用程序开发人员的新数据库角色

Azure AD OAuth2集成

新功能允许单点登录Oracle数据库服务实例或来自Microsoft Azure Cloud的本地Oracle数据库。

请参阅JDBC对OAuth 2.0的支持,包括OCI IAM和Azure AD


部分特性测试

开发者新特性--无表查询

很多数据库都支持没有 FROM 子句的查询,可以直接返回表达式或者函数的值。Oracle 则提供了虚拟的 DUAL 表。不过从 Oracle 23c 开始,也支持了这种无表查询语句。下面让我们一起来看看:

--查询示例

SQL> select 'Oracle Database 23c' as DB, sysdate as Now, 'I am VIP' Name;

DB		    NOW       NAME
------------------- --------- --------
Oracle Database 23c 13-APR-23 I am VIP

SQL> 


开发者新特性--BOOLEAN 数据类型

Oracle Database 23c 引入了新的 boolean 数据类型,可以用于字段定义和 SQL 语句。

true、false、't'、'f'、'true'、'yes' 等可以作为 boolean 类型的输入数据,任何非 0 的数字都会被转换为 true,数字 0 则会被转换为 false。

--创建测试表并插入数据
create table test_bool (val varchar2(10), flg boolean);
insert into test_bool values ('true'  , true );
insert into test_bool values ('false' , false);
insert into test_bool values ('null'  , null );
insert into test_bool values ('t'     ,'t'   );
insert into test_bool values ('yes'   ,'yes' );
insert into test_bool values ('true'  ,'true');
insert into test_bool values ('f'     ,'f'   );
insert into test_bool values ('0'     , 0    );
commit;
SQL> desc test_bool
 Name					   Null?    Type
 ----------------------------------------- -------- ----------------------------
 VAL						    VARCHAR2(10)
 FLG						    BOOLEAN

SQL> select val from test_bool where flg;

VAL
----------
true
t
yes
true

SQL> 
SQL> select val from test_bool where not flg;

VAL
----------
false
f
0

SQL> 


开发者新特性--基于别名的 GROUP BY

Oracle Database 23c 可以基于表达式的别名或者它在 SELECT 列表中的位置指定 GROUP BY 和 HAVING 操作。

select extract(year from hire_date) yr, count(*) as total_emp
from employee
group by yr
having total_emp > 5;


开发者新特性--模式级别的特权

Oracle Database 23c 支持基于整个模式的特权管理:

grant select any table
on schema hr  
to user01;


开发者新特性--CREATE TABLE IF NOT EXISTS

在之前的版本中,如果创建一个已经存在的表,将会返回 ORA-00955: name is already used by an existing object 错误;如果删除一个不存在的表,将会返回 ORA-00942: table or view does not exist 错误。

Oracle Database 23c 支持 CREATE TABLE IF NOT EXISTS 以及 DROP TABLE IF EXISTS 语句,可以避免这些问题:

--在表已存在情况下使用普通语句创建表
SQL> create table test_bool (val varchar2(10), flg boolean); create table test_bool (val varchar2(10), flg boolean) * ERROR at line 1: ORA-00955: name is already used by an existing object
--在表已存在情况下使用IF NOT EXISTS语句创建表 SQL> create table IF NOT EXISTS test_bool (val varchar2(10), flg boolean); Table created.
--在表不存在情况下使用drop table命令删除表 SQL> drop table test; drop table test * ERROR at line 1: ORA-00942: table or view does not exist
--在表不存在情况下使用drop table if exists命令删除表 SQL> drop table if exists test; Table dropped. SQL>
最后修改时间:2023-04-14 16:41:18
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
1人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论