Oracle Database 23c 开发者新特性概览

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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

BOOLEAN 数据类型

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

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

create table bool_test (val varchar2(10), flg boolean);
insert into bool_test values ('true'  , true );
insert into bool_test values ('false' , false);
insert into bool_test values ('null'  , null );
insert into bool_test values ('t'     ,'t'   );
insert into bool_test values ('yes'   ,'yes' );
insert into bool_test values ('true'  ,'true');
insert into bool_test values ('f'     ,'f'   );
insert into bool_test values ('0'     , 0    );

select val from bool_test where flg;
select val from bool_test where not flg;

与此同时Oracle 还提供了一个新的函数 to_boolean()。

无表查询

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

select 'Oracle Database 23c' as db, sysdate as now, 1+1 as result;

JavaScript 存储过程

新版本的 Oracle 存储过程可以支持 JavaScript 语言

create mle module test_js 
language javascript as
    export function f(p1, p2) { return p1+p2; }
    …

create function f (p1 number, p2 number) 
return number as mle module test_js signature f(number, number);

select f(20, 22) ;

CREATE TABLE IF NOT EXIST

在之前的版本中如果创建一个已经存在的表将会返回 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 EXIST 以及 DROP TABLE IF EXIST 语句可以避免这些问题

create table IF NOT EXIST t1 (id INTEGER, txt varchar2(10));

drop table IF EXIST t2;

基于别名的 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;

在之前的版本中以上语句将会返回 ORA-00904: invalid identifier 错误。

另外如果想要使用基于表达式在 SELECT 列表中的位置进行分组需要将初始化参数文件中的 group_by_position_enabled 设置为 true。

关联更新

关联更新可以直接基于其他的表更新某个表中的数据

udpate dest d
set d.col1 = s.c1
from src s
where d.id = s.id;

JSON

支持使用 JSON 模式验证 JSON 文档的格式

create table json_schema_test (
   obj json validate '
     {
         "num": number,
         … 
     }
   '
);

JSON 关系二元性JSON Relational Duality提供了应用程序使用的 JSON 文档和关系型数据库存储的数据行之间的映射。这种映射通过 JSON 关系二元性视图进行定义数据转换通过 GraphQL 实现。

在这里插入图片描述

JSON 关系二元性视图支持一下访问方法

  • SQL
  • 传统 HTTP/REST 操作例如 GET、PUT 以及 POST HTTP 请求
  • Simple Oracle Document APISODA
  • Oracle Database API for MongoDB
  • ORDS

相比 ORM 而言二元性视图的优势在于不依赖于编程语言而且在数据库中进行了优化。

表值构造函数

表值构造函数可以构造一组行值表达式用于 INSERT 语句时可以一次插入多条记录

insert into t1 
values (1, 'first' ),
       (2, 'second'),
       (3, 'third' );

表值构造函数也可以用于查询语句

select * from (
  values (1, 'first' ),
         (2, 'second'),
         (3, 'third' )
) tmp (id, val);

模式级别的特权

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

grant select any table
on schema hr  
to user01;

SQL 域

SQL 域可以额外定义数据约束、显示格式以及排序规则。

create domain email_addr as varchar2(99);

create domain month_year
   constraint month_fmt check (regexp_like(year_month, '^\d\d-\d\d\d\d$')
   display 'Year: ' || substr(year_month, 4, 4) || ', Month: ' || substr(year_month, 1, 2)
   order substr(year_month, 4, 4) || substr(year_month, 1, 2);

create table financial_report
   …
   corrections_to email_addr
   rep_period     month_year,);

两个新的函数 domain_display 和 domain_order 分别可以用于获取域定义中的显示格式和排序函数。

开发者角色

为了方法开发人员的管理新版本提供了一个专用的开发者角色。

begin
   dbms_developer_admin.grant_privs('user01');
end;
/
SQL> grant developer to user01 identified by xxxxxx;
grant succeeded.

SQL> connect user01/xxxxxx@ora23c;
connected.

SQL> select * from session_privs order by privilege;
PRIVILEGE
------------------------------
CREATE ANALYTIC VIEW
CREATE ATTRIBUTE DIMENSION
CREATE CUBE
CREATE CUBE BUILD PROCESS
CREATE CUBE DIMENSION
CREATE DIMENSION
CREATE DOMAIN
CREATE HIERARCHY
CREATE JOB
CREATE MATERIALIZED VIEW
CREATE MINING MODEL
CREATE MLE
CREATE PROCEDURE
CREATE SEQUENCE
CREATE SESSION
CREATE SYNONYM
CREATE TABLE
CREATE TRIGGER
CREATE TYPE
CREATE VIEW
DEBUG CONNECT SESSION
EXECUTE DYNAMIC MLE
FORCE TRANSACTION
ON COMMIT REFRESH

24 rows selected.

表的最大字段数量

从 Oracle Database 23c 开始一个表最多可以拥有 4096 个字段前提是 max_columns 设置为 extended。

模式和对象的注解

键值对形式的注解可以为表、视图、物化视图、字段、索引以及域等提供更加丰富的元数据。

create table test ()
annotations (
   expected_release '1.0',
   test_coverage    'yes'
);

其他

  • merge 和 update 语句的 returning 子句
  • interval 数据类型的聚合操作
  • 区块链表增强
  • SQL <-> PL/SQL 转译器
  • 1024 字节密码
  • Sagas 微服务
  • 无锁列值保留
  • 透明应用连续性
  • dbms_search 搜索包
  • 异步编程
  • SQL 属性图查询语言(ISO SQL/PQL 标准
  • update 语句的 default on null
  • True Cache
  • 实时 SQL 计划管理
  • PDB 级别的只读备库
  • 内置 SQL 防火墙
  • OKafka
  • 自动维护的 Oracle 文本索引
  • 可传输的二进制 XML
  • OAuth 2.0 集成
  • 等等
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: oracle
返回列表

上一篇:MySQL中的锁

下一篇:javascript