帮你快速理解、总结文档立即下载

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 数据库