兼容oracle_红象数据库Oracle兼容性介绍(内核篇)

红象数据库是一款基于PostgreSQL的国产数据库产品,旨在实现与Oracle的平滑迁移。它支持Oracle的数据类型、内置函数、系统视图、系统包、NLS_*参数、CREATE语法以及一些高级功能如PL/SQL。未来将持续完善更多Oracle兼容特性。
摘要由CSDN通过智能技术生成

作者:王颖泽

从事国产数据库产品管理、内核研发工作多年

获得PostgreSQL社区MVP

红象数据库是由RedElephant2020团队在开源PostgreSQL的基础上研发的一款以去O为目标的数据库产品。

这款产品的设计初衷是将应用程序使用的各类Oracle数据库对象及数据平滑地迁移至红象数据库,并利用PostgreSQL生态中经过大规模部署、使用和验证的接口、工具、扩展、方案等,在进行二次开发基础上为用户提供专业化的数据库服务,从而达到替换Oracle的目的。

下面将对红象数据库支持Oracle兼容的内核部分进行详细介绍:

数据类型

支持以下兼容Oracle的数据类型:

类型分类

描述

字符类型

CHAR、VARCHAR、VARCHAR2(支持CHAR或BYTE)、LONG

数值类型

NUMBER、BINARY_FLOAT、BINARY_DOUBLE

日期类型

DATE

时间戳类型

TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE

间隔类型

INTERVAL YEAR TO MONTH、INTERVAL DAY TO SECOND

大对象类型

CLOB、BLOB

二进制类型

RAW、LONG RAW

其他

ROWID、UROWID

红象数据库实现了兼容Oracle的大部分内置数据类型,不仅实现类型的输入、输出函数,还实现了转换、比较、操作符等函数。

内置函数

支持以下兼容Oracle内置函数:

内置函数分类

描述

正则表达式函数

regexp_substr、regexp_replace、regexp_like、regexp_count、regexp_count、regexp_match、regexp_extract

操作符

.,+,?,*,{m},{m,},{m,n},[...],[^...],|,(...),\n,\,^,$,[:class],[.element.],[=character=]

转换函数

to_char、to_date、to_timestamp、to_timestamptz、to_number、to_yminterval、to_dsinterval、rawtohex、rowidtochar、chartorowid、numtoyminterval、numtodsinterval

聚集函数

max、min、avg、sum

数学函数

stddev、stddev_pop、stddev_samp、var_pop、var_samp、variance

字符串函数

substrb、replace、instrb、length、lengthb、substr、instr

日期时间函数

date_part、round、trunc、from_tz、sys_extract_utc、sysdate、sessiontimezone、current_date、current_timestamp、systimestamp、localtimestamp、last_day、add_month、next_day、new_time、tz_offset、months_between

其他

decode、nvl、nvl2、wmsys.wm.concat、nlssort

系统视图

支持以下兼容Oracle的数据系统视图:

all_all_tables

all_cons_columns

all_constraints

all_ind_columns

all_indexes

all_sequences

all_synonyms

all_view_columns

all_tab_columns

all_tables

all_triggers

all_types

all_views

dba_all_tables

all_objects

dba_cons_columns

dba_constraints

dba_ind_columns

dba_indexes

dba_role_privs

dba_roles

dba_sequences

dba_synonyms

dba_view_columns

dba_tab_columns

dba_tables

dba_triggers

dba_types

dba_views

dba_objects

user_all_tables

user_cons_columns

user_constraints

user_ind_columns

user_indexes

user_objects

user_role_privs

user_sequences

user_synonyms

user_tab_columns

user_tables

user_triggers

user_types

user_view_columns

user_views

user_tab_comments

user_tab_cols

user_col_comments

col

系统包

支持如下系统包:

DBMS_OUTPUT、DBMS_RANDOM、DBMS_ROWIDDBMS_OBFUSCATION_TOOLKIT、DBMS_STATS、DBMS_UTILITY、DBMS_PIPE、DBMS_METADATA、DBMS_ALERT、UTL_FILE

NLS_*参数

支持以下兼容Oracle的NLS_*参数,并可使用PostgreSQL的SET/SHOW语法进行设置和查看:

nls_date_format、mls_timestamp_format、nls_timestamp_tz_format、nls_length_semantics

兼容CREATE语法

兼容Oracle以下数据库系统对象的CREATE语法:

表空间、模式、表/分区表/全局、同义词、索引、序列、约束、视图、物化视图、DBLINK、函数、存储过程、触发器、自定义包、自定义类型等。

兼容伪表/伪列

包括DUAL、ROWNUM、ROWID、INSTANCE、LEVEL。

用户、模式、权限

  • 实例中的每个数据库都默认带有sys和system用户,数据库的系统对象存放在sys模式下

  • 创建用户时,会自动创建所对应的模式

  • 对象属主为对象模式所对应的用户、

  • 支持ANY权限

红象数据库中的库级用户与Oracle中的用户相对应。

高级功能

支持MERGE INTO、CONNECT BY、外连接操作符(+)、全局临时表、自定义包、自定义类型(不支持继承)、DBLINK、语句级回滚、索引启用/禁用、、约束启用/禁用、DDL自动提交、同义词、SQL语句中支持中文空格和括号、数据库编码支持GBK/GB18030、用户锁定和解锁等

PL/SQL功能

支持动态SQL(SELECT…INTO…USING…)、动态SQL的DML语句、游标、集合类型(嵌套表、关联数组、动态数组)及其方法、RECORD类型、%type、%rowtype、sys_refcursor、PLS/INTEGER、存储过程/函数语法、匿名块、函数IN OUT、OUT参数和结果集、匿名块IN、OUT、IN OUT参数的传参、标签Label、Label的多段引用、GOTO、内联函数或嵌套子过程、BULK COLLECT INTO、FORLOOP、FORALL、自定义异常、异常处理RAISE/RASE_APPLICATION_ERROR、Prgma EXCEPTION_INIT、函数/存储过程/包中的SUBTYPE、自治事务、PL/SQL中的语句级回滚、触发器内的占位符(:old、:new),referencing语法,statement判断(inserting、deleting、updating)、包中的公有/私有的类型、变量、函数/存储过程,支持Package Body中的BEGIN、END块、自定义类型中的构造函数、静态函数、方法等、按参数名绑定参数、参数占位符等

后续计划

为了能够实现平滑地替换Oracle这一目标,RedElephant2020团队在开源PostgreSQL的基础上进行了大小上百个功能点的开发。

接下来我们将逐步完善Oracle兼容的其他常用特性:

  • INSERT FIRST/ALL

  • PIPELINE函数

  • CLOB/BLOB/BFILE

  • VPD(Virtual Private Database)

  • 常用系统包(DBMS_SQL、DBMS_JOB、DBMS_RLS等)

  • 常用系统视图

  • 常用内置函数

  • TABLE表达式

  • CURSOR表达式

  • ……

13ee1cb170df68ed463f44a614c1775c.png

数据库试用下载地址:https://gitee.com/redelephant2020/packages/tree/master/red-pg

a71fc6bec0fad371645794388558d5db.png正式发布 :红象数据库 redelephant2020

了解更多,请点击“

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值