本文内容来自YashanDB官网,原文内容请见 https://doc.yashandb.com/yashandb/23.3/zh/%E4%BA%A7%E5%93%81%E6%8F%8F%E8%BF%B0/%E4%B8%8EOracle%E5%85%BC%E5%AE%B9%E6%80%A7%E8%AF%B4%E6%98%8E.html
YashanDB在SQL语法、表达式运算、FILTER CONDITION、数据类型、内置函数、系统视图和PL等基本功能上均与Oracle数据库兼容,数据库管理和开发人员不需要花费大量的时间去学习新知识,在已交付特性上直接查阅Oracle相关文档,也可流畅地操作使用YashanDB,实现从Oracle数据库到YashanDB的平滑迁移。
在其他某些功能上YashanDB会与Oracle数据库的表现有所差异或者暂时没有进行兼容,这可能是因为:
- YashanDB与Oracle数据库的底层架构、产品形态等并不相同。
- YashanDB摒弃了一些旧的不符合当前主流业务框架的方法,并增加了自己的特性。
本文将从如下方面具体说明,在单机部署和行式存储模式下,YashanDB对Oracle数据库的兼容情况:
- SQL语法
- 表达式运算
- FILTER CONDITION
- 数据类型
- 内置函数
- PL
- 系统视图
- 字符集
- SQL引擎
- 数据库安全
- 工具兼容
- 其他兼容
SQL语法
YashanDB支持Oracle数据库中主流的SQL语法,其他少数因功能性缺失导致的不兼容将报语法不支持错误,此时应联系我们的技术支持提供变通方案。 更多SQL语法详细说明请查阅开发手册SQL语句文档。
(1)DML类
SELECT
- 支持大部分查询功能,包括单、多表查询,子查询,内连接,半连接,外连接,分组及聚合,层次查询等
- 支持UNION、UNION ALL、INTERSECT、MINUS等集合操作
- 支持如下方式查看执行计划:
- EXPLAIN
- AUTOTRACE
- 支持随机抽样查询能力
- CTE支持递归功能
INSERT
- 支持单行、多行插入,同时支持指定分区插入
- 支持INSERT INTO SELECT语句
- 支持INSERT ALL语句
- 支持单表和多表插入
UPDATE
- 支持单列和多列的更新
- 支持使用子查询
DELETE
- 支持单表和多表的删除
- 支持使用子查询
(2)DDL类
YashanDB兼容Oracle数据库大部分的对象及对象管理操作,包括:
- HEAP表:
- CREATE TABLE/CREATE TABLE AS
- ALTER TABLE
- DROP TABLE
- TRUNCATE TABLE
- 临时表
- GLOBAL TEMPORARY TABLE
- PRIVATE TEMPORARY TABLE
- 分区表
- 支持RANGE/INTERVAL/LIST/HASH类型分区
- 支持ADD|DROP|TRUNCATE PARTITION
- 支持分区行迁移
- 支持SPLIT分区
- 二级分区
- 外部表
- 支持创建目录,CREATE DIRECTORY
- 支持创建和删除外部表
- 约束
- 包括in_line约束/out_of_line约束
- 支持UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK、(NOT) NULL类型约束
- 视图
- CREATE VIEW/CREATE OR REPLACE FORCE VIEW
- DROP VIEW
- 视图支持SELECT/INSERT/UPDATE/DELETE
- 物化视图
- CREATE MATERIALIZED VIEW
- ALTER MATERIALIZED VIEW
- DROP MATERIALIZED VIEW
- 支持本地物化视图,不支持远程物化视图
- BTree索引
- 包括全局索引和本地(LOCAL)索引
- 包括唯一(UNIQUE)索引和非唯一索引
- 包含反向键索引和函数索引
- 支持对索引REBUILD|UNUSABLE|COALESCE|PARALLEL|RENAME
- 支持在相同列上创建多个索引
- 同义词
- 包括私有同义词和公共(PUBLIC)同义词
- 序列
- 包括升序序列和降序序列,可指定CYCLE|NOCYCLE、CACHE|NOCACHE、ORDER|NOORDER
- 序列支持NEXTVAL和CURRVAL
- DBLINK
- 支持Oracle到YashanDB、YashanDB到Oracle和YashanDB到YashanDB的远程连接
- 支持PUBLIC和PRIVATE模式的LINK
- 支持表和视图的连接
- 支持在YashanDB创建远端对象的同义词、在YashanDB上调用远端存储过程和查看LOB数据
(3)HINT
YashanDB支持使用HINT并采用了Oracle的HINT语法,可实现join方式、join order、table scan、index scan等的指定能力。关于HINT的详细说明,请查阅开发手册hint文档。
表达式运算
YashanDB包含了主流的计算框架实现对表达式的运算,此外,Oracle本身由于没有布尔类型(只在其PL中支持)需要使用其他数据类型替代运算,YashanDB则实现了直接的布尔型表达式运算。详见下表:
表达式运算类型 | YashanDB | Oracle数据库 |
---|---|---|
二元运算加法 | 支持 | 支持 |
二元运算减法 | 支持 | 支持 |
二元运算乘法 |