Oracle语法兼容对比 Oracle vs AntDB vs Postgresql
1. DDL
create,alter,drop,truncate
2. DML
insert,update,delete
3. DQL
select
4. DCL
grant,revoke,alter password
5. TCL
commit,rollback,savepoint
6. 数据类型
| ORACLE | AntDB | Postgresql |
|---|---|---|
| varchar2 | varchar2 | varchar |
| char(n) | char(n) | char(n) |
| date(日期) | date(日期) | timestamp(时间日期型)、date(日期)、time(时间) |
| number(n) | number(n) | smallint、int、bigint |
| number(p,n) | number(p,n) | numeric(p,n)(低效)、float(高效) |
| clob | clob | text |
| blob | blob | bytea |
| rownum | rownum | 无 |
| rowid | rowid | ctid |
7. 系统函数
原生支持: 原生支持: √;不支持:╳;扩展支持 扩展支持 :○
| 函数类型 | 函数名称 | ORACLE | AntDB | Postgresql |
|---|---|---|---|---|
| 数值函数 | ABS | √ | √ | √ |
| ACOS | √ | √ | √ | |
| ASIN | √ | √ | √ | |
| ATAN | √ | √ | √ | |
| ATAN2 | √ | √ | √ | |
| BITAND | √ | √ | √ | |
| CEIL | √ | √ | √ | |
| COS | √ | √ | √ | |
| COSH | √ | √ | √ | |
| EXP | √ | √ | √ | |
| FLOOR | √ | √ | √ | |
| LN | √ | √ | √ | |
| LOG | √ | √ | √ | |
| MOD | √ | √ | √ | |
| NANVL | √ | √ | ○ | |
| POWER | √ | √ | √ | |
| ROUND (number) | √ | √ | √ | |
| SIGN | √ | √ | √ | |
| SIN | √ | √ | √ | |
| SINH | √ | √ | ○ | |
| SQRT | √ | √ | √ | |
| TAN | √ | √ | √ | |
| TANH | √ | √ | ○ | |
| TRUNC (number) | √ | √ | √ | |
| 字符函数 | CHR | √ | √ | √ |
| CONCAT | √ | √ | √ | |
| INITCAP | √ | √ | √ | |
| LOWER | √ | √ | √ | |
| LPAD | √ | √ | √ | |
| LTRIM | √ | √ | √ | |
| REGEXP_REPLACE | √ | √ | √ | |
| REGEXP_SUBSTR | √ | √ | ╳ | |
| REPLACE | √ | √ | √ | |
| RPAD | √ | √ | √ | |
| RTRIM | √ | √ | √ | |
| SUBSTR | √ | √ | √ | |
| TRANSLATE | √ | √ | √ | |
| TREAT | √ | ╳ | ╳ | |
| TRIM | √ | √ | √ | |
| UPPER | √ | √ | √ | |
| ASCII | √ | √ | √ | |
| INSTR | √ | √ | ○ | |
| LENGTH | √ | √ | √ | |
| REGEXP_INSTR | √ | √ | ╳ | |
| REVERSE | √ | √ | √ | |
| 日期函数 | ADD_MONTHS | √ | √ | ○ |
| CURRENT_DATE | √ | √ | √ | |
| CURRENT_TIMESTAMP | √ | √ | √ | |
| EXTRACT (datetime) | √ | √ | √ | |
| LAST_DAY | √ | √ | ○ | |
| LOCALTIMESTAMP | √ | ╳ 关键字 | ╳ 关键字 | |
| MONTHS_BETWEEN | √ | √ | ○ | |
| NEW_TIME | √ | √ | ╳ | |
| NEXT_DAY | √ | √ | ○ | |
| ROUND (date) | √ | √ | ╳ | |
| SYSDATE | √ | √ | ╳ | |
| SYSTIMESTAMP | √ | √ | ╳ | |
| TO_CHAR (datetime) | √ | √ | √ | |
| TO_TIMESTAMP | √ | √ | √ | |
| TRUNC (date) | √ | √ | √ | |
| 编码解码函数 | DECODE | √ | √ | ○ |
| DUMP | √ | √ | ○ | |
| 空值比较函数 | COALESCE | √ | √ | √ |
| LNNVL | √ | √ | ○ | |
| NANVL | √ | √ | ○ | |
| NULLIF | √ | √ | √ | |
| NVL | √ | √ | ○ | |
| NVL2 | √ | √ | ○ | |
| 通用数值比较函数 | GREATEST | √ | √ | √ |
| LEAST | √ | √ | √ | |
| 类型转换函数 | CAST | √ | √ | √ |
| CONVERT | √ | √ | ○ | |
| TO_CHAR (character) | √ | √ | √ | |
| TO_CHAR (datetime) | √ | √ | √ | |
| TO_CHAR (number) | √ | √ | √ | |
| TO_DATE | √ | √ | √ | |
| TO_NUMBER | √ | √ | √ | |
| TO_TIMESTAMP | √ | √ | √ | |
| 分析函数 | AVG * | √ | √ | √ |
| COUNT * | √ | √ | √ | |
| DENSE_RANK | √ | √ | √ | |
| FIRST | √ | ╳ | ╳ | |
| FIRST_VALUE * | √ | √ | √ | |
| LAG | √ | √ | √ | |
| LAST | √ | ╳ | ╳ | |
| LAST_VALUE * | √ | √ | √ | |
| LEAD | √ | √ | √ | |
| MAX * | √ | √ | √ | |
| MIN * | √ | √ | √ | |
| RANK | √ | √ | √ | |
| ROW_NUMBER | √ | √ | √ | |
| SUM * | √ | √ | √ |
8. SQL运算符
| SQL运算符类型 | 运算符名称 | ORACLE | AntDB | Postgresql |
|---|---|---|---|---|
| 算数运算符 | + | √ | √ | √ |
| - | √ | √ | √ | |
| * | √ | √ | √ | |
| / | √ | √ | √ | |
| 逻辑运算符 | and | √ | √ | √ |
| or | √ | √ | √ | |
| not | √ | √ | √ | |
| 比较运算符 | != | √ | √ | √ |
| <> | √ | √ | √ | |
| ^= | √ | ╳ | ╳ | |
| = | √ | √ | √ | |
| < | √ | √ | √ | |
| > | √ | √ | √ | |
| <= | √ | √ | √ | |
| >= | √ | √ | √ | |
| is (not) null | √ | √ | √ | |
| (not) between and | √ | √ | √ | |
| (not)in | √ | √ | √ | |
| all/any | √ | √ | √ | |
| exists | √ | √ | √ | |
| like | √ | √ | √ | |
| 连接运算符 | ll | √ | √ | √ |
| 合并运算符 | union (all) | √ | √ | √ |
| minus | √ | √ | except | |
| intersect | √ | ╳ | √ |
9. 查询
| SQL查询类型 | 名称 | ORACLE | AntDB | Postgresql |
|---|---|---|---|---|
| 去重 | distinct | √ | √ | √ |
| unique | √ | ╳ | ╳ | |
| 分组 | group by | √ | √ | √ |
| 过滤 | having | √ | √ | √ |
| 排序 | order by | √ | √ | √ |
| 递归 | connect by | √ | √ | ╳ |
| cte | cte | √ | √ | √ |
| case when | case when | √ | √ | √ |
| 批量insert | insert all into | √ | ╳ insert into values | ╳ insert into values |
| merge into | merge into | √ | ╳ upsert | ╳ upsert |
10. 表连接
| 表连接类型 | 表连接名称 | ORACLE | AntDB | Postgresql |
|---|---|---|---|---|
| 内连接 | (inner) join | √ | √ | √ |
| from tableA,tableB | √ | √ | √ | |
| 左连接 | left (outer) join | √ | √ | √ |
| 右连接 | right (outer) join | √ | √ | √ |
| 全连接 | full (outer) join | √ | √ | √ |
| (+) | (+) | √ | √ | ╳ |
11. 视图/函数/存储过程/触发器
| 类型 | 名称 | ORACLE | AntDB | Postgresql |
|---|---|---|---|---|
| 视图 | create view | √ | √ | √ |
| alter view | √ | √ | √ | |
| drop view | √ | √ | √ | |
| 函数 | create fuction | √ | √ | √ |
| alter fuction | √ | √ | √ | |
| drop fuction | √ | √ | √ | |
| 存储过程 | create procedure | √ | √ | √ |
| alter procedure | √ | √ | √ | |
| drop procedure | √ | √ | √ | |
| 触发器 | create trigger | √ | √ | √ |
| alter trigger | √ | √ | √ | |
| drop trigger | √ | √ | √ |
12. sequence
| 类型 | 名称 | ORACLE | AntDB | Postgresql |
|---|---|---|---|---|
| 新建序列 | create sequence | √ | √ | √ |
| 修改序列 | alter sequence | √ | √ | √ |
| 删除序列 | drop sequence | √ | √ | √ |
| 操作序列 | seq.nextVal | √ | √ | ╳ nextVal(‘seq’) |
| seq.currVal | √ | √ | ╳ currVal(‘seq’) |
13. 其他
| 类型 | 名称 | ORACLE | AntDB | Postgresql |
|---|---|---|---|---|
| 过程语言 | declare | √ | √ | √ |
| exception | √ | √ | √ | |
| cursor | √ | √ | √ | |
| 自定义type | create type | √ | √ | √ |
| alter type | √ | √ | √ | |
| drop type | √ | √ | √ | |
| 数据类型隐式转换 | 隐式转换 | √ | √ | ╳ |
| oracle别名 | oracle别名 | √ | √ | ╳ |
| 类型复制 | %type | √ | √ | √ |
| %rowtype | √ | √ | √ | |
| like通配符 | % | √ | √ | √ |
| _ | √ | √ | √ | |
| dual虚拟表 | dual | √ | √ | ╳ |