Oracle 兼容特性概述

最近更新时间:2024-11-01 15:20:42

我的收藏
本节介绍 TDSQL PG 数据库在 Oracle 兼容方面的特性。
TDSQL PG 数据库基本兼容了 Oracle 的数据类型、SQL 功能、数据库对象(如:同义词、包)。在 PL(过程化语言)方面也做了很多细致兼容工作,用户应用迁移基本不需要改动业务代码。
TDSQL PG 对如下功能做了兼容:
数据类型
内建函数
SQL 语法
PL/SQL
系统视图
系统包
数据库对象管理
Oracle 配置参数

使用 Oracle 兼容模式

TDSQL PG 内核引擎会根据数据库类型来区分 Oracle 兼容模式与 PG 模式。
在创建数据库的时候使用sql modedb_mode 关键字即可创建一个指定模式的数据库,db_mode 可选 oracle 或 postgresql。不指定即默认 PostgreSQL 模式。
示例:
tdsql=# create database ora sql mode oracle;
CREATE DATABASE

tdsql=# \\l
List of databases
Name | Owner | Encoding | Sqlmode | Collate | Ctype | Access privileges
---------------+-------+----------+----------+------------+------------+-------------------
ora | tbase | UTF8 | oracle | zh_CN.utf8 | zh_CN.utf8 |
postgres | tbase | UTF8 | postgres | zh_CN.utf8 | zh_CN.utf8 |
tbase_db | tbase | UTF8 | postgres | zh_CN.utf8 | zh_CN.utf8 |
tdsql | tbase | UTF8 | postgres | zh_CN.utf8 | zh_CN.utf8 |
template0 | tbase | UTF8 | postgres | zh_CN.utf8 | zh_CN.utf8 | =c/tbase +
| | | | | | tbase=CTc/tbase
template0_ora | tbase | UTF8 | oracle | zh_CN.utf8 | zh_CN.utf8 | =c/tbase +
| | | | | | tbase=CTc/tbase
template1 | tbase | UTF8 | postgres | zh_CN.utf8 | zh_CN.utf8 | =c/tbase +
| | | | | | tbase=CTc/tbase
template1_ora | tbase | UTF8 | oracle | zh_CN.utf8 | zh_CN.utf8 | =c/tbase +
| | | | | | tbase=CTc/tbase
user1 | user1 | UTF8 | postgres | zh_CN.utf8 | zh_CN.utf8 |
(9 rows)

可以看到 ora 数据库的 Sqlmode 列显示 oracle,即表示 ora 数据库当前为 Oracle 模式。
tdsql 数据库的 Sqlmode 列显示 postgres,即表示 tdsql 数据库当前为 PostgreSQL 模式。

SQL 数据类型

TDSQL PG 兼容了 Oracle 所有常用数据类型。详情参见 SQL 数据类型

内建函数

TDSQL PG 兼容了大部分 Oracle 内建函数。详情参见 内建函数

SQL 语法

TDSQL PG 支持语法说明:
序号
Oracle 数据库
TDSQL PG 数据库
说明
1
SELECT
支持
支持单表和多表连接;支持多种 JOIN 连接方式(内连接、外连接);支持子查询;支持层次查询;支持多种窗口函数等。
支持多种集合操作:UNION、UNION ALL、INTERSECT、EXCEPT、MINUS 等。
支持 EXPLAIN 打印计划。
支持 PIVOT、UNPIVOT
2
INSERT
支持
支持VALUES插入一行或者多行;
支持分区表插入;
支持INSERT ... SELECT插入数据
支持同时插入多个目标表(INSERT ALL/FIRST)
3
UPDATE
支持
SET 支持一次更新多列数据
4
DELETE
支持
支持删除表数据
5
TRUNCATE
支持
支持清空表数据
6
并行查询
支持
支持并行 INSERT 和 UPDATE
7
Hint
支持
支持 Hint

PL/SQL

TDSQL PG 支持 PLSQL 语法说明:
序号
Oracle 数据库
TDSQL PG 数据库
说明
1
数据类型
支持
支持 sql 类型数据类型
支持集合和记录类型
支持 object 类型
支持 oracle 兼容的 pls_integer 和 binary_integer
2
流程控制
支持
支持循环控制逻辑
支持条件控制逻辑
支持顺序执行逻辑
3
集合类型与记录类型
支持
支持嵌套表
支持关联数组
支持可变数组
支持记录类型
4
静态 SQL
支持
支持静态 SQL
5
动态 SQL
支持
支持动态 SQL
6
子过程
支持
支持包内子过程
支持 OBJECT 类型子过程
支持创建 FUNCTION 和P ROCEDURE
7
触发器
支持
支持 insert/update/delete/truncate4种类型 DML 触发器
支持 alter/drop/create 且出发目标是 database/schema 的 ddl 触发器
支持 befor/after/instead of 三种触发时机的触发器
8
异常处理
支持
PL/SQL 中支持异常块,可以便捷地检查和处理错误
9
PACKAGE 对象
支持
支持定义包对象,用来封装一组成员变量和成员函数
10
自定义类型
支持
支持使用 CREATE TYPE 创建自定义类型
11
游标
支持
支持隐式游标
支持显式游标
支持自定义游标类型
支持 SYS_REFCURSOR
12
函数嵌套声明
支持
支持在函数/存储过程/匿名块中嵌套定义函数或者存储过程
13
PL 系统包
支持
包括 DBMS_OUTPUT、DBMS_LOB、DBMS_ASSERT、DBMS_ALERT、DBMS_LOCK、DBMS_METADATA、DBMS_RANDOM、DBMS_SESSION 等
注意:
NOCOPY 仅仅语法兼容 Oracle,内核没有实现 OUT 参数按照 By Reference 来传递。
不支持条件编译、PL 的编译优化级别(PLSQL_OPTIMIZE_LEVEL)。

系统视图

支持多个 Oracle 系统视图。请参见 系统视图

系统包

支持多个 Oracle 系统包。请参见 系统包

数据库对象管理

序号
数据库对象
TDSQL PG 数据库
说明
1
支持
支持创建表,包括临时表和全局临时表。创建表可以指定约束、索引等信息。
支持修改表定义。通过 ALTER TABLE 来添加列,修改列类型,增加或者删除默认值、约束等。
支持删除表定义。
2
约束
支持
支持 CHECK、UNIQUE、NOT NULL 约束。
支持 PRIMARY KEY 约束。
支持 FOREIGN KEY 约束。
支持 ALTER TABLE 对约束进行启用、禁用。
3
分区表
支持
支持 TDSQL PG 语法创建一级和多级分区;不支持用 Oracle 语法方式创建分区表
支持 RANGE、LIST、HASH 分区
支持分区表的局部索引
支持分区表的基本维护:
分区表添加
分区表删除
分区表分裂、合并
4
索引
支持
支持 BTREE、HASH、BRIN 索引。支持 gist、gin、spgist 索引。
支持索引的创建和删除
5
视图
支持
支持创建和删除视图
支持 FORCE VIEW
支持简单视图的 DML 操作。不支持多表视图的 DML
6
序列
支持
支持序列的创建和删除
支持 NOCACHE、NOORDER 序列
7
同义词
支持
支持同义词的创建和删除
支持对表、视图、同义词等对象创建同义词
8
DBLINK
支持
TDSQL PG 支持创建、删除 DBLINK
支持用 DBLINK 读和写 Oracle 数据库