# compat-tools **Repository Path**: zhang_xubo/compat-tools ## Basic Information - **Project Name**: compat-tools - **Description**: Other databases (Oracle, MySQL, SQL Server, etc.) compatible views & functions for openGauss - **Primary Language**: SQL - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 17 - **Created**: 2021-11-11 - **Last Updated**: 2022-05-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # compat-tools ## 介绍 本项目是一个兼容工具集合,旨在为从其他异构数据库,迁移到 OpenGauss 之后的系统,创建必要的函数,以及系统视图的兼容。为后续的系统运维与应用改造提供便利。 脚本中带有版本控制,直接运行脚本时,会根据如下三种情况进行处理: 1. 若待创建对象在目标数据库中不存在,则直接进行创建 2. 若待创建对象版本高于目标数据库中的对象版本,则进行升级重建 3. 若待创建对象版本不高于目标数据库中的对象版本,则跳过创建 ## 软件架构 SQL文件: - runMe.sql: 总调度脚本 - Oracle_Views.sql: Oracle数据库兼容性数据字典及视图 - Oracle_Functions.sql: Oracle数据库兼容性函数 - Oracle_Packages.sql: Oracle数据库管理包兼容 - MySQL_Views.sql: MySQL数据库兼容性数据字典及视图 //TODO - MySQL_Functions.sql: MySQL数据库兼容性函数 ## 使用说明 直接在openGauss数据库中执行sql文本。 > 注意: 以下所有操作需要在当前脚本所在的目录中执行 ### 创建所有兼容性对象 创建所有兼容性对象,包括: 视图,函数,管理包等。 ``` # 本地用户,默认库登录 gsql -f runMe.sql # 详细创建语法,注意 test 用户权限(需要具有 sysadmin 权限) gsql -h 127.0.0.1 -p 5432 -U test -d postgres -f runMe.sql ``` ### 创建单一类兼容对象 以下以 Oracle 兼容性视图为例,其他兼容性对象脚本,也可以以此方式创建。 ``` # 本地用户,默认库登录 gsql -f Oracle_Views.sql # 详细创建语法,注意 test 用户权限(需要具有 sysadmin 权限) gsql -h 127.0.0.1 -p 5432 -U test -d postgres -f Oracle_Views.sql ``` ## Oracle 兼容视图 Oracle_Views.sql 包含如下几类 Oracle 兼容性视图: ### 管理视图: ALL\_\*, DBA\_\*, USER\_\* > `ALL_` 视图当前与 `DBA_` 视图一致,并未做权限检验,后期版本将会考虑权限校验。 * [DBA,ALL,USER]\_CATALOG * [DBA,ALL,USER]\_CONS\_COLUMNS * [DBA,ALL,USER]\_CONSTRAINTS * [DBA,ALL,USER]\_DATA\_FILES * [DBA,ALL,USER]\_DEPENDENCIES * [DBA,ALL,USER]\_IND\_COLUMNS * [DBA,ALL,USER]\_IND\_PARTITIONS * [DBA,ALL,USER]\_IND\_STATISTICS * [DBA,ALL,USER]\_INDEX\_USAGE * [DBA,ALL,USER]\_INDEXES * [DBA,ALL,USER]\_OBJECTS * [DBA,ALL,USER]\_PART\_INDEXES * [DBA,ALL,USER]\_PART\_TABLES * [DBA,ALL,USER]\_PROCEDURES * [DBA,ALL,USER]\_SEGMENTS * [DBA,ALL,USER]\_SEQUENCES * [DBA,ALL,USER]\_SOURCE * [DBA,ALL,USER]\_SYNONYMS * [DBA,ALL,USER]\_TAB\_COL\_STATISTICS * [DBA,ALL,USER]\_TAB\_COLS * [DBA,ALL,USER]\_TAB\_COLUMNS * [DBA,ALL,USER]\_TAB\_COMMENTS * [DBA,ALL,USER]\_TAB\_MODIFICATIONS * [DBA,ALL,USER]\_TAB\_PARTITIONS * [DBA,ALL,USER]\_TAB\_STATISTICS * [DBA,ALL,USER]\_TABLES * [DBA,ALL,USER]\_TABLESPACES * [DBA,ALL,USER]\_TRIGGER\_COLS * [DBA,ALL,USER]\_TRIGGERS * [DBA,ALL,USER]\_TYPES * [DBA,ALL,USER]\_VIEWS * [DBA,ALL,USER]\_JOBS * [DBA,ALL,USER]\_JOBS\_RUNNING * [DBA,ALL]\_USERS * DBA\_SOURCE\_ALL * NLS_DATABASE_PARAMETERS * NLS_INSTANCE_PARAMETERS * NLS_SESSION_PARAMETERS ### 其他短名称视图 * DICTIONARY * DICT * COLS * IND * OBJ * TAB * DUAL (For 2.0 and above) ### 动态性能视图: GV$, V$ * [GV,V]$DATAFILE * [GV,V]$LOCK * [GV,V]$PARAMETER * [GV,V]$PARAMETER\_VALID\_VALUES * [GV,V]$SESSION * [GV,V]$SESSTAT * [GV,V]$SPPARAMETER * [GV,V]$SYSSTAT * [GV,V]$TABLESPACE * [GV,V]$VERSION * [GV,V]$NLS_PARAMETERS * [GV,V]$NLS_VALID_VALUES ### 权限统一查询视图 * DBA_DETAIL_PRIVILEGES * DBA_ALL_PRIVILEGES * DBA_ALL_PRIVILEGES_SQL ## Oracle 兼容函数 ### 字符函数 - regexp_substr(text,text,int4) - regexp_substr(text,text,int4,int4,text,int4) -- 注意: 最后一个参数 p_subexpr 不支持 - regexp_instr(text,text,int4,int4,text,int4) - regexp_replace(text,text,text,int4,int4,text) - regexp_count(text,text,int4,text) - replace(text,text) ### 时间函数 - months_between(timestamp, timestamp) - trunc(timestamp, text) - trunc(timestamptz, text) - round(timestamptz,text) ### 数字函数 - nanvl(numeric,numeric) ### 聚合函数 - wm_concat(text) ### NULL 值相关函数 - nullif(anyelement, anyelement) - nvl2(anyelement, anyelement, anyelement) ### 其他函数 - sys_guid() - ora_hash(anyelement,bigint,bigint) - show(text) -- 提供类似 Oracle 中 show xxx 查看相关参数的功能 - show_parameter(text) -- 等同于 show(text) - dump(anynonarray) ## Oracle 管理包 ### DBMS_METADATA * get_ddl(object_type, object_name, schema_name) ### DBMS_OUTPUT * enable(size) * disable() * get_line(line, status) * get_lines(lines, numlines) * new_line() * put(text) * put_line(text) ### DBMS_RANDOM - initialize(int4) -- deprecated in Oracle - normal() - random() -- deprecated in Oracle - seed(int4) - seed(text) - string(char,int4) - terminate() -- deprecated in Oracle - value() - value(numeric,numeric) ### DBMS_JOB - broken(int8,bool,timestamp) - change(int8,text,timestamp,text,int4,bool) - instance(int8,int4,bool) - interval(int8,text) - next_date(int8,timestamp) - remove(int8) - run(int8,bool) - submit(int8,text,timestamp,text,bool,int4,bool) - user_export(int8,text) - what(int8,text) ## MySQL 兼容函数 ### NULL 相关函数 > 注意: ifnull 效果等同于通用函数 coalesce,在条件允许的情况下,建议修改 SQL 使用 coalesce 函数,该函数几乎在各个数据库中均支持 - ifnull(text,text) - ifnull(numeric,numeric) - ifnull(timestamp,timestamp) - ifnull(timestamptz,timestamptz) ### 条件控制函数 - if(bool,text,text) - if(bool,numeric,numeric) - if(bool,timestamptz,timestamptz) ### 字符函数 - find_in_set(text,text) - find_in_set(text,text[]) - field(text,text[]) - elt(int4,text[]) - strcmp(text,text) - insert(text,int8,int8,text) - lcase(text) - ucase(text) - space(int4) - mid(text,int8,int8) - locate(text,text,int4) - to_base64(text) - from_base64(text) ### 数字函数 - field(numeric,numeric[]) - log10(numeric) - log10(float8) - rand(int4) ### 时间函数 - unix_timestamp(timestamp) - unix_timestamp(timestamptz) - from_unixtime(int8) - from_unixtime(numeric) - from_unixtime(numeric,text) - to_days(timestamp) - to_seconds(timestamp) - to_seconds(timestamptz) - timediff(timestamptz,timestamptz) - time_to_sec(time) - sec_to_time(int4) ## Roadmap