本文内容来自YashanDB官网,原文内容请见 https://doc.yashandb.com/yashandb/23.3/zh/%E4%BA%A7%E5%93%81%...
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数据库 |
---|---|---|
二元运算加法 | 支持 | 支持 |
二元运算减法 | 支持 | 支持 |
二元运算乘法 | 支持 | 支持 |
二元运算除法 | 支持 | 支持 |
二元运算取余 | 支持 | 支持 |
一元运算取反 | 支持 | 支持 |
位运算与 | 支持 | 支持 |
位运算或 | 支持 | 支持 |
位运算异或 | 支持 | 支持 |
Boolean运算 | 支持 | 不支持 |
FILTER CONDITION
YashanDB的FILTER CONDITON类型完全兼容Oracle数据库的FILTER CONDITON类型。详见下表:
FILTER CONDITON | YashanDB | Oracle数据库 |
---|---|---|
ALL | 支持 | 支持 |
ANY | 支持 | 支持 |
AND | 支持 | 支持 |
EQUAL | 支持 | 支持 |
NOT EQUAL | 支持 | 支持 |
EXISTS | 支持 | 支持 |
NOT EXISTS | 支持 | 支持 |
GREAT EQUAL | 支持 | 支持 |
GREATE | 支持 | 支持 |
IN | 支持 | 支持 |
NOT IN | 支持 | 支持 |
IS NULL | 支持 | 支持 |
IS NOT NULL | 支持 | 支持 |
LESS | 支持 | 支持 |
LESS EQUAL | 支持 | 支持 |
LIKE | 支持 | 支持 |
NOT LIKE | 支持 | 支持 |
REG LIKE | 支持 | 支持 |
NOT REG LIKE | 支持 | 支持 |
OR | 支持 | 支持 |
SOME | 支持 | 支持 |
数据类型
YashanDB目前包含了27种数据类型,与Oracle数据库对比情况见下表:
数据类型 | YashanDB | Oracle数据库 |
---|---|---|
BOOLEAN | 支持 | 不支持 |
TINYINT | 支持 | 不支持 |
SMALLINT | 支持 | 支持 |
INTEGER | 支持 | 支持 |
BIGINT | 支持 | 不支持 |
FLOAT | 支持 | 支持 |
DOUBLE | 支持 | 支持 |
NUMBER | 支持 | 支持 |
DATE | 支持 | 支持 |
TIMESTAMP | 支持 | 支持 |
TIME | 支持 | 不支持 |
INTERVAL YEAR TO MONTH | 支持 | 支持 |
INTERVAL DAY TO SECOND | 支持 | 支持 |
CHAR | 支持 | 支持 |
VARCHAR | 支持 | 支持 |
NCHAR | 支持 | 支持 |
NVARCHAR | 支持 | 支持 |
ST\_GEOMETRY | 支持 | 支持 |
RAW | 支持 | 支持 |
CLOB | 支持 | 支持 |
NCLOB | 支持 | 支持 |
BLOB | 支持 | 支持 |
BIT | 支持 | 不支持 |
ROWID | 支持 | 支持 |
UROWID | 支持 | 支持 |
CURSOR | 支持 | 支持 |
JSON | 支持 | 支持 |
XMLTYPE | 支持 | 支持 |
Note:
YashanDB的大对象(CLOB/BLOB)数据类型有较强的存储能力,但大对象存取性能不推荐在复杂场景下使用。
YashanDB的XMLTYPE数据类型底层以CLOB进行存储,与Oracle存储方式不同,在函数调用时可能存在差异。
内置函数
YashanDB目前实现了超过120个内置函数,具体清单及说明请查阅开发手册内置函数文档。
与Oracle数据库的内置函数对比情况见下表:
函数类型 | 支持函数列表 | YashanDB | Oracle数据库 |
---|---|---|---|
数学运算函数 | ABS,ACOS,ASIN,ATAN,ATAN2,COS,COT, CEIL,DIV,EXP,FLOOR,LOG,LN,MOD,PI,POW,POWER,ROUND,SIGN,SIN,SINH,STDDEV,STDDEV\_POP,STDDEV\_SAMP,SQRT,TAN,TANH,TRUNC,VARIANCE,VAR\_POP,VAR\_SAMP,…… | 支持 | 支持 |
字符处理函数 | ASCII,CHR,CONCAT,INITCAP,INSTR,INSTRB,LEFT,LENGTH,LENGTH2,LOWER,LPAD,LTRIM,NLSSORT,POSITION,REPLACE,RIGHT,RPAD,RTRIM,SPLIT,STRPOS,SUBSTR,SUBSTRB,SOUNDEX,TRIM,TRANSLATE ... USING,UNISTR,UPPER,empty\_LOB,…… | 支持 | 支持 |
正则匹配函数 | REGEXP\_LIKE,REGEXP\_COUNT,REGEXP\_INSTR,REGEXP\_REPLACE,REGEXP\_SUBSTR,…… | 支持 | 支持 |
转换函数 | BIN\_TO\_NUM,CAST,NUMTODSINTERVAL,NUMTOYMINTERVAL,ROWIDTOCHAR,TRANSLATE,TO\_CHAR,TO\_DATE,TO\_DSINTERVAL,TO\_NUMBER,TO\_TIMESTAMP,TO\_YMINTERVAL,…… | 支持 | 支持 |
集合处理函数 | COALESCE,DECODE,GREATEST,LEAST,NVL,NVL2,…… | 支持 | 支持 |
聚集函数 | AVG,COUNT,GROUP\_CONCAT,LISTAGG,MAX,MIN,SUM,MEDIAN,PERCENTILE\_CONT,…… | 支持 | 支持 |
窗口函数 | AVG,COUNT,FIRST,FIRST\_VALUE,LAST,LAST\_VALUE,LEAD,MAX,SUM,RANK,ROW\_NUMBER,…… | 支持 | 支持 |
系统函数 | SCN\_TO\_TIMESTAMP,TIMESTAMP\_TO\_SCN,USERENV,…… | 支持 | 支持 |
时间处理函数 | ADD\_MONTHS,CURRENT\_TIMESTAMP,EXTRACT,LAST\_DAY,NOW,NEXT\_DAY,OVERLAPS,…… | 支持 | 支持 |
条件处理函数 | IF,IFNULL,ISNULL,NULLIF | 支持 | 不支持 |
JSON处理函数 | JSON,JSON\_ARRAY\_GET,JSON\_ARRAY\_LENGTH,JSON\_EXISTS,JSON\_FORMAT,JSON\_PARSE,JSON\_QUERY,JSON\_SERIALIZE,…… | 支持 | 支持 |
随机函数 | RANDOM | 支持 | 不支持 |
其他函数 | HEXTORAW,SQLCODE,SQLERRM,SYS\_CONNECT\_BY\_PATH,…… | 支持 | 支持 |
PL
YashanDB兼容了Oracle数据库大部分的PL功能,包括:
- 数据类型
- 流程控制
- 静态SQL
- 动态SQL
异常处理
- 系统定义异常
- 用户自定义异常
游标
- BULK COLLECT
存储过程
- 过程体加密wrap功能
触发器
- 支持行级、语句级触发器。
- 目前仅支持在表上创建触发器,不支持在视图上创建触发器
用户自定义高级包
- 支持子过程
- 支持全局变量和TYPE定义
用户自定义函数
- SQL语言的UDF
- 外置JAVA语言UDF
- 外置C语言的UDF
用户自定义数据类型
- OBJECT TYPE
- VARRAY TYPE
- TABLE TYPE
- 支持EXECUTE、UNDER ON对象级的权限控制
- JOB
内置高级包
YashanDB兼容了Oracle数据库部分的内置高级包,包括:
高级包名称 |
---|
DBMS\_AUDIT\_MGMT |
DBMS\_APPLICATION\_INFO |
DBMS\_CRYPTO |
DBMS\_DESCRIBE |
DBMS\_HM |
DBMS\_IJOB |
DBMS\_JOB |
DBMS\_LOB |
DBMS\_LOCK |
DBMS\_METADATA |
DBMS\_MVIEW |
DBMS\_OUTPUT |
DBMS\_RANDOM |
DBMS\_RESOURCE\_MANAGER |
DBMS\_ROWID |
DBMS\_SCHEDULER |
DBMS\_SESSION |
DBMS\_SQL |
DBMS\_STANDARD |
DBMS\_STATS |
DBMS\_UTILITY |
DBMS\_XA |
OWA\_UTIL |
UTL\_ENCODE |
UTL\_FILE |
UTL\_I18N |
UTL\_RAW |
系统视图
YashanDB兼容Oracle数据库的DBA视图清单如下:(ALL/USER视图兼容清单与DBA视图对应相同)
视图名称 |
---|
AUDITABLE\_SYSTEM\_ACTIONS |
AUDIT\_UNIFIED\_ENABLED\_POLICIES |
AUDIT\_UNIFIED\_POLICIES |
COL |
DBA\_ARGUMENTS |
DBA\_AUDIT\_MGMT\_CLEANUP\_JOBS |
DBA\_AUDIT\_MGMT\_LAST\_ARCH\_TS |
DBA\_COLL\_TYPES |
DBA\_COL\_COMMENTS |
DBA\_CONSTRAINTS |
DBA\_CONS\_COLUMNS |
DBA\_DATA\_FILES |
DBA\_DB\_LINKS |
DBA\_DEPENDENCIES |
DBA\_EXTERNAL\_TABLES |
DBA\_FREE\_SPACE |
DBA\_HISTOGRAMS |
DBA\_INDEXES |
DBA\_IND\_COLUMNS |
DBA\_IND\_EXPRESSIONS |
DBA\_IND\_PARTITIONS |
DBA\_IND\_STATISTICS |
DBA\_IND\_SUBPARTITIONS |
DBA\_JOBS |
DBA\_LOBS |
DBA\_LOB\_PARTITIONS |
DBA\_LOB\_SUBPARTITIONS |
DBA\_LOG\_GROUPS |
DBA\_MVIEWS |
DBA\_NESTED\_TABLES |
DBA\_OBJECTS |
DBA\_OUTLINES |
DBA\_OUTLINE\_HINTS |
DBA\_PART\_COL\_STATISTICS |
DBA\_PART\_HISTOGRAMS |
DBA\_PART\_INDEXES |
DBA\_PART\_KEY\_COLUMNS |
DBA\_PART\_TABLES |
DBA\_PROCEDURES |
DBA\_PROFILES |
DBA\_RECYCLEBIN |
DBA\_ROLES |
DBA\_ROLE\_PRIVS |
DBA\_SCHEDULER\_JOBS |
DBA\_SEGMENTS |
DBA\_SEQUENCES |
DBA\_SOURCE |
DBA\_SUBPARTITION\_TEMPLATES |
DBA\_SUBPART\_KEY\_COLUMNS |
DBA\_SYNONYMS |
DBA\_SYS\_PRIVS |
DBA\_TABLES |
DBA\_TABLESPACES |
DBA\_TAB\_COLS |
DBA\_TAB\_COLUMNS |
DBA\_TAB\_COL\_STATISTICS |
DBA\_TAB\_COMMENTS |
DBA\_TAB\_MODIFICATIONS |
DBA\_TAB\_PARTITIONS |
DBA\_TAB\_PRIVS |
DBA\_TAB\_STATISTICS |
DBA\_TAB\_STAT\_PREFS |
DBA\_TAB\_SUBPARTITIONS |
DBA\_TEMP\_FILES |
DBA\_TRIGGERS |
DBA\_TRIGGER\_COLS |
DBA\_TRIGGER\_ORDERING |
DBA\_TYPES |
DBA\_TYPE\_ATTRS |
DBA\_TYPE\_METHODS |
DBA\_USERS |
DBA\_VIEWS |
UNIFIED\_AUDIT\_TRAIL |
YashanDB兼容Oracle数据库的动态视图清单如下:
视图名称 |
---|
V$2PC\_PENDING |
V$ARCHIVE\_DEST |
V$ARCHIVE\_DEST\_STATUS |
V$ARCHIVE\_GAP |
V$ARCHIVED\_LOG |
V$BUFFER\_POOL |
V$BUFFER\_POOL\_STATISTICS |
V$CONTROLFILE |
V$DATABASE |
V$DATAFILE |
V$DIAG\_INCIDENT |
V$DIAG\_PROBLEM |
V$FIXED\_TABLE |
V$FIXED\_VIEW\_DEFINITION |
V$HM\_CHECK |
V$HM\_CHECK\_PARAM |
V$HM\_FINDING |
V$HM\_RUN |
V$INSTANCE |
V$LOCK |
V$LOCKED\_OBJECT |
V$LOGFILE |
V$MYSTAT |
V$OPEN\_CURSOR |
V$OSSTAT |
V$PARAMETER |
V$PQ\_TQSTAT |
V$PROCESS |
V$PX\_SESSION |
V$RECOVERY\_PROGRESS |
V$RESERVED\_WORDS |
V$ROLLBACK |
V$SEGMENT\_STATISTICS |
V$SESS\_TIME\_MODEL |
V$SESSION |
V$SESSION\_EVENT |
V$SESSION\_WAIT |
V$SESSTAT |
V$SGA |
V$SGASTAT |
V$SQL |
V$SQL\_BIND\_CAPTURE |
V$SQL\_PLAN |
V$SQL\_PLAN\_STATISTICS |
V$SQLAREA |
V$SQLSTATS |
V$SQLTEXT |
V$STATNAME |
V$SYSSTAT |
V$SYSTEM\_EVENT |
V$SYSTEM\_PARAMETER |
V$SYSTEM\_WAIT\_CLASS |
V$TABLESPACE |
V$TEMP\_EXTENT\_POOL |
V$TRANSACTION |
V$UNDOSTAT |
V$VERSION |
字符集
YashanDB支持如下字符集:
- ASCII
- GBK
- UTF8
- ISO88591
- GB18030
同时,YashanDB支持如下字符集排序方式:
- ASCII\_GENERAL\_CS
- ASCII\_GENERAL\_CI
- GBK\_GENERAL\_CS
- GBK\_GENERAL\_CI
- UTF8\_GENERAL\_CS
- UTF8\_GENERAL\_CI
- UTF8\_PINYIN\_CS
- UTF8\_PINYIN\_CI
- ISO88591\_GENERAL\_CS
- ISO88591\_GENERAL\_CI
- GB18030\_GENERAL\_CS
- GB18030\_GENERAL\_CI
- GB18030\_PINYIN\_CS
- GB18030\_PINYIN\_CI
SQL引擎
YashanDB的SQL引擎兼容了Oracle数据库大部分的特性,包括:
- 支持查询改写
- 支持预编译语句
- 支持基于成本的优化器
- 支持执行计划生成与展示(EXPLAIN)
- 支持执行计划缓存
- 支持执行计划快速参数化
- 支持执行计划绑定
- 支持Optimizer Hint
- 支持OutLine
- 支持like和reglike的模糊匹配能力
数据库安全
权限管理
- 兼容Oracle数据库的系统级权限
- 兼容常见的对象权限,支持table、view对象级权限管理及使用
支持授权与移除权限
- with admin option
- with grant option
- 支持创建用户自定义角色
- 支持DBA和PUBLIC系统预定义角色及其权限认证
- 提供视图查询权限相关内容
身份鉴别
- 兼容Oracle数据库的密码策略
- profile支持用户密码管理
审计
- 兼容Oracle数据库的统一审计
工具兼容
imp
- 支持FULL,FROM/TOUSER和TABLES模式的维度导入
- 支持指定元数据和数据导入
- 支持覆盖已存在的表,即truncate模式
exp
- 支持FULL,OWNER和TABLES模式的维度导出
- 支持指定元数据和数据导出
其他兼容
统计信息
YashanDB的统计信息体系兼容了Oracle数据库大部分的特性,包括:
- 支持收集表(分区表)、索引、列等维度统计信息
- 支持动态采样功能
- 支持锁定统计信息
- 支持收集列直方图统计信息
- 支持通过JOB配置收集统计信息任务
- 支持使用高级包DBMS\_STATS导入导出统计信息
表空间
- 支持ONLINE/OFFLINE
- 支持RENAME
可靠性
- 支持闪回DML操作、闪回查询功能
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。