1.3.2.12. 其他
1.3.2.12.1. GoldenDB-Mysql
1.3.2.12.1.1. PROMPT 命令
语法
PROMPT 文本内容
警告
目标库不支持该命令,因此通过配置参数,config/unisql.conf中unisql.global.replace.sql参数可配置需要替换的sql语句。 使用前需要开启unisql.splitsql.transform.multisql参数为1
示例
-- 转换前ORACLE SQL:
PROMPT ==============================
PROMPT 订单表分区创建脚本 v1.0
PROMPT 创建人:XXX
PROMPT 创建时间:2025-12-04
PROMPT ==============================
PROMPT 开始执行表创建逻辑...
-- 转换后GoldenDB-Mysql SQL(unisql.global.replace.sql = 'select 1'):
select 1;
select 1;
select 1;
select 1;
select 1;
select 1
1.3.2.12.1.2. rownum
支持 >, >=, =, <=, < 操作符
支持别名
示例
-- 转换前ORACLE SQL:
select a, rownum as row_count from t where rownum >= 10 and rownum <= 10
-- 转换后GoldenDB-Mysql SQL
-- 和原语句保持一致
1.3.2.12.1.3. all_indexes视图
语法
支持
OWNER,
INDEX_NAME,
INDEX_TYPE,
TABLE_OWNER,
TABLE_NAME,
TABLE_TYPE,
UNIQUENESS列
警告
目标库创建后的OWNER, INDEX_NAME, INDEX_TYPE, TABLE_OWNER, TABLE_NAME默认为小写,为了和oracle保持一致使用all_indexes视图时,都转成了大写
索引名称未指定时,两边库自动生成的索引名称不一致
主键索引目标库为
PRIMARYINDEX_TYPE,两边库特性不一样因此有些不一致
OWNER 字段在目标库中仅仅指的是数据库名称,目标库可指用户或模式名称;
在oracle是查询当前用户有权限的对象,goldendb_mysql那边information_schema.all_*无论有无权限都查询出来。所以使用需要加上owner过滤条件,否则目标库查询出来的会多很多。
示例
CREATE TABLE test_20251216_1 (
dept_id NUMBER(4) NOT NULL, -- 部门ID(非空)
dept_name VARCHAR2(50) NOT NULL, -- 部门名称(非空)
create_time DATE DEFAULT SYSDATE, -- 创建时间(默认当前时间)
-- 主键约束(命名约束,推荐显式命名便于维护)
CONSTRAINT pk_dept PRIMARY KEY (dept_id),
-- 唯一约束(部门名称不能重复)
CONSTRAINT uk_dept_name UNIQUE (dept_name),
-- 检查约束(部门ID必须大于0)
CONSTRAINT ck_dept_id CHECK (dept_id > 0)
);
CREATE TABLE test_20251216_2 (
-- 基础字段定义
emp_id NUMBER(6) NOT NULL, -- 员工ID(非空约束,列级)
emp_name VARCHAR2(100) NOT NULL, -- 员工姓名(非空)
email VARCHAR2(100), -- 邮箱
phone VARCHAR2(20), -- 手机号
dept_id NUMBER(4), -- 所属部门(关联dept表)
salary NUMBER(8,2), -- 薪资
hire_date DATE, -- 入职日期
gender CHAR(1), -- 性别(男/女)
is_active VARCHAR2(1) DEFAULT 'Y', -- 是否在职(默认Y)
-- 主键约束
CONSTRAINT pk_emp PRIMARY KEY (emp_id),
-- 唯一约束
CONSTRAINT uk_emp_email UNIQUE (email),
CONSTRAINT uk_emp_phone UNIQUE (phone),
-- 外键约束(Oracle仅支持ON DELETE,不支持ON UPDATE)
CONSTRAINT fk_emp_dept FOREIGN KEY (dept_id)
REFERENCES test_20251216_1 (dept_id)
ON DELETE SET NULL, -- 仅保留ON DELETE SET NULL(Oracle支持)
-- 检查约束(薪资必须大于0)
CONSTRAINT ck_emp_salary CHECK (salary > 0)
);
CREATE INDEX idx_emp_name ON test_20251216_2 (emp_name);
CREATE INDEX idx_emp_dept_hire ON test_20251216_2 (dept_id, hire_date);
CREATE BITMAP INDEX idx_emp_gender ON test_20251216_2 (gender);
CREATE BITMAP INDEX idx_emp_is_active ON test_20251216_2 (is_active);
-- 转换前ORACLE SQL:
select * from all_indexes WHERE owner=upper('UNISQL_TEST') AND TABLE_NAME = upper('test_20251216_2');
OWNER |INDEX_NAME |INDEX_TYPE|TABLE_OWNER|TABLE_NAME |TABLE_TYPE|UNIQUENESS|
-----------+-----------------+----------+-----------+---------------+----------+----------+
UNISQL_TEST|PK_EMP |NORMAL |UNISQL_TEST|TEST_20251216_2|TABLE |UNIQUE |
UNISQL_TEST|UK_EMP_EMAIL |NORMAL |UNISQL_TEST|TEST_20251216_2|TABLE |UNIQUE |
UNISQL_TEST|UK_EMP_PHONE |NORMAL |UNISQL_TEST|TEST_20251216_2|TABLE |UNIQUE |
UNISQL_TEST|IDX_EMP_NAME |NORMAL |UNISQL_TEST|TEST_20251216_2|TABLE |NONUNIQUE |
UNISQL_TEST|IDX_EMP_DEPT_HIRE|NORMAL |UNISQL_TEST|TEST_20251216_2|TABLE |NONUNIQUE |
UNISQL_TEST|IDX_EMP_GENDER |BITMAP |UNISQL_TEST|TEST_20251216_2|TABLE |NONUNIQUE |
UNISQL_TEST|IDX_EMP_IS_ACTIVE|BITMAP |UNISQL_TEST|TEST_20251216_2|TABLE |NONUNIQUE |
-- 转换后GoldenDB-Mysql SQL:
SELECT * FROM unisql.all_indexes WHERE owner=upper('UNISQL_TEST') AND TABLE_NAME=upper('test_20251216_2');
OWNER |INDEX_NAME |INDEX_TYPE|TABLE_OWNER|TABLE_NAME |TABLE_TYPE|UNIQUENESS|
-----------+-----------------+----------+-----------+---------------+----------+----------+
UNISQL_TEST|IDX_EMP_DEPT_HIRE|MULTIPLE |UNISQL_TEST|TEST_20251216_2|TABLE |NONUNIQUE |
UNISQL_TEST|IDX_EMP_GENDER |MULTIPLE |UNISQL_TEST|TEST_20251216_2|TABLE |NONUNIQUE |
UNISQL_TEST|IDX_EMP_IS_ACTIVE|MULTIPLE |UNISQL_TEST|TEST_20251216_2|TABLE |NONUNIQUE |
UNISQL_TEST|IDX_EMP_NAME |MULTIPLE |UNISQL_TEST|TEST_20251216_2|TABLE |NONUNIQUE |
UNISQL_TEST|PRIMARY |PRIMARY |UNISQL_TEST|TEST_20251216_2|TABLE |UNIQUE |
UNISQL_TEST|UK_EMP_EMAIL |UNIQUE |UNISQL_TEST|TEST_20251216_2|TABLE |UNIQUE |
UNISQL_TEST|UK_EMP_PHONE |UNIQUE |UNISQL_TEST|TEST_20251216_2|TABLE |UNIQUE |
1.3.2.12.1.4. user_indexes视图
语法
支持
INDEX_NAME,
INDEX_TYPE,
TABLE_OWNER,
TABLE_NAME,
TABLE_TYPE,
UNIQUENESS列
警告
目标库创建后的INDEX_NAME, INDEX_TYPE, TABLE_OWNER, TABLE_NAME默认为小写,为了和oracle保持一致使用user_indexes视图时,都转成了大写
索引名称未指定时,两边库自动生成的索引名称不一致
主键索引目标库为
PRIMARYINDEX_TYPE,两边库特性不一样因此有些不一致
需要保证用户名和数据库名相同,会将当前的数据库名当作用户名;
只能查询到有权限的表
示例
CREATE TABLE test_20251216_1 (
dept_id NUMBER(4) NOT NULL, -- 部门ID(非空)
dept_name VARCHAR2(50) NOT NULL, -- 部门名称(非空)
create_time DATE DEFAULT SYSDATE, -- 创建时间(默认当前时间)
-- 主键约束(命名约束,推荐显式命名便于维护)
CONSTRAINT pk_dept PRIMARY KEY (dept_id),
-- 唯一约束(部门名称不能重复)
CONSTRAINT uk_dept_name UNIQUE (dept_name),
-- 检查约束(部门ID必须大于0)
CONSTRAINT ck_dept_id CHECK (dept_id > 0)
);
CREATE TABLE test_20251216_2 (
-- 基础字段定义
emp_id NUMBER(6) NOT NULL, -- 员工ID(非空约束,列级)
emp_name VARCHAR2(100) NOT NULL, -- 员工姓名(非空)
email VARCHAR2(100), -- 邮箱
phone VARCHAR2(20), -- 手机号
dept_id NUMBER(4), -- 所属部门(关联dept表)
salary NUMBER(8,2), -- 薪资
hire_date DATE, -- 入职日期
gender CHAR(1), -- 性别(男/女)
is_active VARCHAR2(1) DEFAULT 'Y', -- 是否在职(默认Y)
-- 主键约束
CONSTRAINT pk_emp PRIMARY KEY (emp_id),
-- 唯一约束
CONSTRAINT uk_emp_email UNIQUE (email),
CONSTRAINT uk_emp_phone UNIQUE (phone),
-- 外键约束(Oracle仅支持ON DELETE,不支持ON UPDATE)
CONSTRAINT fk_emp_dept FOREIGN KEY (dept_id)
REFERENCES test_20251216_1 (dept_id)
ON DELETE SET NULL, -- 仅保留ON DELETE SET NULL(Oracle支持)
-- 检查约束(薪资必须大于0)
CONSTRAINT ck_emp_salary CHECK (salary > 0)
);
CREATE INDEX idx_emp_name ON test_20251216_2 (emp_name);
CREATE INDEX idx_emp_dept_hire ON test_20251216_2 (dept_id, hire_date);
CREATE BITMAP INDEX idx_emp_gender ON test_20251216_2 (gender);
CREATE BITMAP INDEX idx_emp_is_active ON test_20251216_2 (is_active);
-- 转换前ORACLE SQL:
select * from user_indexes WHERE TABLE_NAME = upper('test_20251216_2');
INDEX_NAME |INDEX_TYPE|TABLE_OWNER|TABLE_NAME |TABLE_TYPE|UNIQUENESS|
-----------------+----------+-----------+---------------+----------+----------+
PK_EMP |NORMAL |UNISQL_TEST|TEST_20251216_2|TABLE |UNIQUE |
UK_EMP_EMAIL |NORMAL |UNISQL_TEST|TEST_20251216_2|TABLE |UNIQUE |
UK_EMP_PHONE |NORMAL |UNISQL_TEST|TEST_20251216_2|TABLE |UNIQUE |
IDX_EMP_NAME |NORMAL |UNISQL_TEST|TEST_20251216_2|TABLE |NONUNIQUE |
IDX_EMP_DEPT_HIRE|NORMAL |UNISQL_TEST|TEST_20251216_2|TABLE |NONUNIQUE |
IDX_EMP_GENDER |BITMAP |UNISQL_TEST|TEST_20251216_2|TABLE |NONUNIQUE |
IDX_EMP_IS_ACTIVE|BITMAP |UNISQL_TEST|TEST_20251216_2|TABLE |NONUNIQUE |
-- 转换后GoldenDB-Mysql SQL:
SELECT * FROM unisql.user_indexes WHERE TABLE_NAME=upper('test_20251216_2');
INDEX_NAME |INDEX_TYPE|TABLE_OWNER|TABLE_NAME |TABLE_TYPE|UNIQUENESS|
-----------------+----------+-----------+---------------+----------+----------+
IDX_EMP_DEPT_HIRE|MULTIPLE |UNISQL_TEST|TEST_20251216_2|TABLE |NONUNIQUE |
IDX_EMP_GENDER |MULTIPLE |UNISQL_TEST|TEST_20251216_2|TABLE |NONUNIQUE |
IDX_EMP_IS_ACTIVE|MULTIPLE |UNISQL_TEST|TEST_20251216_2|TABLE |NONUNIQUE |
IDX_EMP_NAME |MULTIPLE |UNISQL_TEST|TEST_20251216_2|TABLE |NONUNIQUE |
PRIMARY |PRIMARY |UNISQL_TEST|TEST_20251216_2|TABLE |UNIQUE |
UK_EMP_EMAIL |UNIQUE |UNISQL_TEST|TEST_20251216_2|TABLE |UNIQUE |
UK_EMP_PHONE |UNIQUE |UNISQL_TEST|TEST_20251216_2|TABLE |UNIQUE |
1.3.2.12.1.5. user_tables视图
语法
支持
TABLE_NAME ,
TABLESPACE_NAME ,
CLUSTER_NAME ,
IOT_NAME ,
STATUS列
警告
目标库创建后的TABLE_NAME , TABLESPACE_NAME , CLUSTER_NAME , IOT_NAME默认为小写,为了和oracle保持一致使用user_tables视图时,都转成了大写
TABLESPACE_NAME,两边库特性不一样因此不一致
需要保证用户名和数据库名相同,会将当前的数据库名当作用户名;
只能查询到有权限的表
示例
CREATE TABLE test_20251216_1 (
dept_id NUMBER(4) NOT NULL, -- 部门ID(非空)
dept_name VARCHAR2(50) NOT NULL, -- 部门名称(非空)
create_time DATE DEFAULT SYSDATE, -- 创建时间(默认当前时间)
-- 主键约束(命名约束,推荐显式命名便于维护)
CONSTRAINT pk_dept PRIMARY KEY (dept_id),
-- 唯一约束(部门名称不能重复)
CONSTRAINT uk_dept_name UNIQUE (dept_name),
-- 检查约束(部门ID必须大于0)
CONSTRAINT ck_dept_id CHECK (dept_id > 0)
);
CREATE TABLE test_20251216_2 (
-- 基础字段定义
emp_id NUMBER(6) NOT NULL, -- 员工ID(非空约束,列级)
emp_name VARCHAR2(100) NOT NULL, -- 员工姓名(非空)
email VARCHAR2(100), -- 邮箱
phone VARCHAR2(20), -- 手机号
dept_id NUMBER(4), -- 所属部门(关联dept表)
salary NUMBER(8,2), -- 薪资
hire_date DATE, -- 入职日期
gender CHAR(1), -- 性别(男/女)
is_active VARCHAR2(1) DEFAULT 'Y', -- 是否在职(默认Y)
-- 主键约束
CONSTRAINT pk_emp PRIMARY KEY (emp_id),
-- 唯一约束
CONSTRAINT uk_emp_email UNIQUE (email),
CONSTRAINT uk_emp_phone UNIQUE (phone),
-- 外键约束(Oracle仅支持ON DELETE,不支持ON UPDATE)
CONSTRAINT fk_emp_dept FOREIGN KEY (dept_id)
REFERENCES test_20251216_1 (dept_id)
ON DELETE SET NULL, -- 仅保留ON DELETE SET NULL(Oracle支持)
-- 检查约束(薪资必须大于0)
CONSTRAINT ck_emp_salary CHECK (salary > 0)
);
CREATE INDEX idx_emp_name ON test_20251216_2 (emp_name);
CREATE INDEX idx_emp_dept_hire ON test_20251216_2 (dept_id, hire_date);
CREATE BITMAP INDEX idx_emp_gender ON test_20251216_2 (gender);
CREATE BITMAP INDEX idx_emp_is_active ON test_20251216_2 (is_active);
-- 转换前ORACLE SQL:
select * from user_tables WHERE TABLE_NAME = upper('test_20251216_2');
TABLE_NAME |TABLESPACE_NAME|CLUSTER_NAME|IOT_NAME|STATUS|
---------------+---------------+------------+--------+------+
TEST_20251216_2|USERS | | |VALID |
-- 转换后GoldenDB-Mysql SQL:
select * from unisql.user_tables WHERE TABLE_NAME = upper('test_20251216_2');
TABLE_NAME |TABLESPACE_NAME |CLUSTER_NAME|IOT_NAME|STATUS|
---------------+---------------------------+------------+--------+------+
TEST_20251216_2|unisql_test/test_20251216_2| | |VALID |
1.3.2.12.1.6. all_tab_columns视图
语法
支持
OWNER ,
TABLE_NAME ,
COLUMN_NAME ,
DATA_TYPE,
DATA_TYPE_MOD,
DATA_TYPE_OWNER,
DATA_LENGTH ,
DATA_PRECISION列
警告
目标库创建后的OWNER ,TABLE_NAME , COLUMN_NAME , DATA_TYPE, DATA_TYPE_MOD, DATA_TYPE_OWNER默认为小写,为了和oracle保持一致使用all_tab_columns视图时,都转成了大写
OWNER 字段在目标库中仅仅指的是数据库名称,目标库可指用户或模式名称;
在oracle是查询当前用户有权限的对象,goldendb_mysql那边information_schema.all_*无论有无权限都查询出来。所以使用需要加上owner过滤条件,否则目标库查询出来的会多很多。
- DATA_TYPE通过统一sql转换后类型不一致,使用时需要注意,如下:
Oracle DATA_TYPE
统一SQL转换后DATA_TYPE
自定义all_tab_columns视图中DATA_TYPE
BINARY_FLOAT
float
FLOAT
BINARY_DOUBLE
double
DOUBLE
BLOB
longblob
LONGBLOB
CLOB
longtext
LONGTEXT
NCLOB
longtext
LONGTEXT
CHAR
char
CHAR
CHARACTER
char
CHAR
DATE
datetime
DATETIME
TIMESTAMP
timestamp
TIMESTAMP
DECIMAL
decimal
DECIMAL
DEC
dec
DECIMAL
NUMBER
decimal
DECIMAL
NUMERIC
numeric
DECIMAL
DOUBLE PRECISION
double
DOUBLE
FLOAT
float
DOUBLE
REAL
real
DOUBLE
INTEGER
bigint
BIGINT
INT
bigint
BIGINT
SMALLINT
bigint
BIGINT
LONG
mediumtext
MEDIUMTEXT
LONG RAW
longblob
LONGBLOB
NCHAR
nchar
CHAR
NCHAR VARYING
nvarchar
VARCHAR
NVARCHAR2
nvarchar
VARCHAR
RAW
varbinary
VARBINARY
VARCHAR
varchar
VARCHAR
VARCHAR2
varchar
VARCHAR
BFILE
不支持
—
TIMESTAMP(n) WITH TIME ZONE
不支持
—
TIMESTAMP(n) WITH LOCAL TIME ZONE
不支持
—
INTERVAL YEAR(n) TO MONTH
不支持
—
INTERVAL DAY(p) TO SECOND(s)
不支持
—
ROWID
不支持
—
UROWID(n)
不支持
—
XMLTYPE
不支持
—
DATA_LENGTH列的「物理存储最大字节数」不一致,oracle中VARCHAR2(100) 的DATA_LENGTH为100(字节),goldendb-mysql中VARCHAR(100)的DATA_LENGTH为400(字节)utf8mb4
DATA_PRECISION列的「精度」,针对于oracle中NUMBER(s,p)定义了s精度则相等,没有定义精度直接是NUMBER的和其他类型则不相等。
示例
CREATE TABLE test_20251216_1 (
dept_id NUMBER(4) NOT NULL, -- 部门ID(非空)
dept_name VARCHAR2(50) NOT NULL, -- 部门名称(非空)
create_time DATE DEFAULT SYSDATE, -- 创建时间(默认当前时间)
-- 主键约束(命名约束,推荐显式命名便于维护)
CONSTRAINT pk_dept PRIMARY KEY (dept_id),
-- 唯一约束(部门名称不能重复)
CONSTRAINT uk_dept_name UNIQUE (dept_name),
-- 检查约束(部门ID必须大于0)
CONSTRAINT ck_dept_id CHECK (dept_id > 0)
);
CREATE TABLE test_20251216_2 (
-- 基础字段定义
emp_id NUMBER(6) NOT NULL, -- 员工ID(非空约束,列级)
emp_name VARCHAR2(100) NOT NULL, -- 员工姓名(非空)
email VARCHAR2(100), -- 邮箱
phone VARCHAR2(20), -- 手机号
dept_id NUMBER(4), -- 所属部门(关联dept表)
salary NUMBER(8,2), -- 薪资
hire_date DATE, -- 入职日期
gender CHAR(1), -- 性别(男/女)
is_active VARCHAR2(1) DEFAULT 'Y', -- 是否在职(默认Y)
-- 主键约束
CONSTRAINT pk_emp PRIMARY KEY (emp_id),
-- 唯一约束
CONSTRAINT uk_emp_email UNIQUE (email),
CONSTRAINT uk_emp_phone UNIQUE (phone),
-- 外键约束(Oracle仅支持ON DELETE,不支持ON UPDATE)
CONSTRAINT fk_emp_dept FOREIGN KEY (dept_id)
REFERENCES test_20251216_1 (dept_id)
ON DELETE SET NULL, -- 仅保留ON DELETE SET NULL(Oracle支持)
-- 检查约束(薪资必须大于0)
CONSTRAINT ck_emp_salary CHECK (salary > 0)
);
CREATE INDEX idx_emp_name ON test_20251216_2 (emp_name);
CREATE INDEX idx_emp_dept_hire ON test_20251216_2 (dept_id, hire_date);
CREATE BITMAP INDEX idx_emp_gender ON test_20251216_2 (gender);
CREATE BITMAP INDEX idx_emp_is_active ON test_20251216_2 (is_active);
-- 转换前ORACLE SQL:
select * from all_tab_columns WHERE owner=upper('UNISQL_TEST') AND TABLE_NAME = upper('test_20251216_2');
OWNER |TABLE_NAME |COLUMN_NAME|DATA_TYPE|DATA_TYPE_MOD|DATA_TYPE_OWNER|DATA_LENGTH|DATA_PRECISION|
-----------+---------------+-----------+---------+-------------+---------------+-----------+--------------+
UNISQL_TEST|TEST_20251216_2|EMP_ID |NUMBER | | | 22| 6|
UNISQL_TEST|TEST_20251216_2|EMP_NAME |VARCHAR2 | | | 100| |
UNISQL_TEST|TEST_20251216_2|EMAIL |VARCHAR2 | | | 100| |
UNISQL_TEST|TEST_20251216_2|PHONE |VARCHAR2 | | | 20| |
UNISQL_TEST|TEST_20251216_2|DEPT_ID |NUMBER | | | 22| 4|
UNISQL_TEST|TEST_20251216_2|SALARY |NUMBER | | | 22| 8|
UNISQL_TEST|TEST_20251216_2|HIRE_DATE |DATE | | | 7| |
UNISQL_TEST|TEST_20251216_2|GENDER |CHAR | | | 1| |
UNISQL_TEST|TEST_20251216_2|IS_ACTIVE |VARCHAR2 | | | 1| |
-- 转换后GoldenDB-Mysql SQL:
select * from unisql.all_tab_columns WHERE owner=upper('UNISQL_TEST') AND TABLE_NAME = upper('test_20251216_2');
OWNER |TABLE_NAME |COLUMN_NAME|DATA_TYPE|DATA_TYPE_MOD|DATA_TYPE_OWNER|DATA_LENGTH|DATA_PRECISION|
-----------+---------------+-----------+---------+-------------+---------------+-----------+--------------+
UNISQL_TEST|TEST_20251216_2|EMP_ID |DECIMAL | | | 3| 6|
UNISQL_TEST|TEST_20251216_2|EMP_NAME |VARCHAR | | | 400| 0|
UNISQL_TEST|TEST_20251216_2|EMAIL |VARCHAR | | | 400| 0|
UNISQL_TEST|TEST_20251216_2|PHONE |VARCHAR | | | 80| 0|
UNISQL_TEST|TEST_20251216_2|DEPT_ID |DECIMAL | | | 2| 4|
UNISQL_TEST|TEST_20251216_2|SALARY |DECIMAL | | | 4| 8|
UNISQL_TEST|TEST_20251216_2|HIRE_DATE |DATETIME | | | 5| 0|
UNISQL_TEST|TEST_20251216_2|GENDER |CHAR | | | 4| 0|
UNISQL_TEST|TEST_20251216_2|IS_ACTIVE |VARCHAR | | | 4| 0|
1.3.2.12.1.7. user_tab_columns视图
语法
支持
TABLE_NAME ,
COLUMN_NAME ,
DATA_TYPE,
DATA_TYPE_MOD,
DATA_TYPE_OWNER,
DATA_LENGTH ,
DATA_PRECISION列
警告
目标库创建后的TABLE_NAME , COLUMN_NAME , DATA_TYPE, DATA_TYPE_MOD, DATA_TYPE_OWNER默认为小写,为了和oracle保持一致使用user_tab_columns视图时,都转成了大写
需要保证用户名和数据库名相同,会将当前的数据库名当作用户名;
只能查询到有权限的表
- DATA_TYPE通过统一sql转换后类型不一致,使用时需要注意,如下:
Oracle DATA_TYPE
统一SQL转换后DATA_TYPE
自定义all_tab_columns视图中DATA_TYPE
BINARY_FLOAT
float
FLOAT
BINARY_DOUBLE
double
DOUBLE
BLOB
longblob
LONGBLOB
CLOB
longtext
LONGTEXT
NCLOB
longtext
LONGTEXT
CHAR
char
CHAR
CHARACTER
char
CHAR
DATE
datetime
DATETIME
TIMESTAMP
timestamp
TIMESTAMP
DECIMAL
decimal
DECIMAL
DEC
dec
DECIMAL
NUMBER
decimal
DECIMAL
NUMERIC
numeric
DECIMAL
DOUBLE PRECISION
double
DOUBLE
FLOAT
float
DOUBLE
REAL
real
DOUBLE
INTEGER
bigint
BIGINT
INT
bigint
BIGINT
SMALLINT
bigint
BIGINT
LONG
mediumtext
MEDIUMTEXT
LONG RAW
longblob
LONGBLOB
NCHAR
nchar
CHAR
NCHAR VARYING
nvarchar
VARCHAR
NVARCHAR2
nvarchar
VARCHAR
RAW
varbinary
VARBINARY
VARCHAR
varchar
VARCHAR
VARCHAR2
varchar
VARCHAR
BFILE
不支持
—
TIMESTAMP(n) WITH TIME ZONE
不支持
—
TIMESTAMP(n) WITH LOCAL TIME ZONE
不支持
—
INTERVAL YEAR(n) TO MONTH
不支持
—
INTERVAL DAY(p) TO SECOND(s)
不支持
—
ROWID
不支持
—
UROWID(n)
不支持
—
XMLTYPE
不支持
—
DATA_LENGTH列的「物理存储最大字节数」不一致,oracle中VARCHAR2(100) 的DATA_LENGTH为100(字节),goldendb-mysql中VARCHAR(100)的DATA_LENGTH为400(字节)utf8mb4
DATA_PRECISION列的「精度」,针对于oracle中NUMBER(s,p)定义了s精度则相等,没有定义精度直接是NUMBER的和其他类型则不相等。
示例
CREATE TABLE test_20251216_1 (
dept_id NUMBER(4) NOT NULL, -- 部门ID(非空)
dept_name VARCHAR2(50) NOT NULL, -- 部门名称(非空)
create_time DATE DEFAULT SYSDATE, -- 创建时间(默认当前时间)
-- 主键约束(命名约束,推荐显式命名便于维护)
CONSTRAINT pk_dept PRIMARY KEY (dept_id),
-- 唯一约束(部门名称不能重复)
CONSTRAINT uk_dept_name UNIQUE (dept_name),
-- 检查约束(部门ID必须大于0)
CONSTRAINT ck_dept_id CHECK (dept_id > 0)
);
CREATE TABLE test_20251216_2 (
-- 基础字段定义
emp_id NUMBER(6) NOT NULL, -- 员工ID(非空约束,列级)
emp_name VARCHAR2(100) NOT NULL, -- 员工姓名(非空)
email VARCHAR2(100), -- 邮箱
phone VARCHAR2(20), -- 手机号
dept_id NUMBER(4), -- 所属部门(关联dept表)
salary NUMBER(8,2), -- 薪资
hire_date DATE, -- 入职日期
gender CHAR(1), -- 性别(男/女)
is_active VARCHAR2(1) DEFAULT 'Y', -- 是否在职(默认Y)
-- 主键约束
CONSTRAINT pk_emp PRIMARY KEY (emp_id),
-- 唯一约束
CONSTRAINT uk_emp_email UNIQUE (email),
CONSTRAINT uk_emp_phone UNIQUE (phone),
-- 外键约束(Oracle仅支持ON DELETE,不支持ON UPDATE)
CONSTRAINT fk_emp_dept FOREIGN KEY (dept_id)
REFERENCES test_20251216_1 (dept_id)
ON DELETE SET NULL, -- 仅保留ON DELETE SET NULL(Oracle支持)
-- 检查约束(薪资必须大于0)
CONSTRAINT ck_emp_salary CHECK (salary > 0)
);
CREATE INDEX idx_emp_name ON test_20251216_2 (emp_name);
CREATE INDEX idx_emp_dept_hire ON test_20251216_2 (dept_id, hire_date);
CREATE BITMAP INDEX idx_emp_gender ON test_20251216_2 (gender);
CREATE BITMAP INDEX idx_emp_is_active ON test_20251216_2 (is_active);
-- 转换前ORACLE SQL:
select * from user_tab_columns WHERE TABLE_NAME = upper('test_20251216_2');
TABLE_NAME |COLUMN_NAME|DATA_TYPE|DATA_TYPE_MOD|DATA_TYPE_OWNER|DATA_LENGTH|DATA_PRECISION|
---------------+-----------+---------+-------------+---------------+-----------+--------------+
TEST_20251216_2|EMP_ID |NUMBER | | | 22| 6|
TEST_20251216_2|EMP_NAME |VARCHAR2 | | | 100| |
TEST_20251216_2|EMAIL |VARCHAR2 | | | 100| |
TEST_20251216_2|PHONE |VARCHAR2 | | | 20| |
TEST_20251216_2|DEPT_ID |NUMBER | | | 22| 4|
TEST_20251216_2|SALARY |NUMBER | | | 22| 8|
TEST_20251216_2|HIRE_DATE |DATE | | | 7| |
TEST_20251216_2|GENDER |CHAR | | | 1| |
TEST_20251216_2|IS_ACTIVE |VARCHAR2 | | | 1| |
-- 转换后GoldenDB-Mysql SQL:
select * from unisql.user_tab_columns WHERE TABLE_NAME = upper('test_20251216_2');
TABLE_NAME |COLUMN_NAME|DATA_TYPE|DATA_TYPE_MOD|DATA_TYPE_OWNER|DATA_LENGTH|DATA_PRECISION|
---------------+-----------+---------+-------------+---------------+-----------+--------------+
TEST_20251216_2|EMP_ID |DECIMAL | | | 3| 6|
TEST_20251216_2|EMP_NAME |VARCHAR | | | 400| 0|
TEST_20251216_2|EMAIL |VARCHAR | | | 400| 0|
TEST_20251216_2|PHONE |VARCHAR | | | 80| 0|
TEST_20251216_2|DEPT_ID |DECIMAL | | | 2| 4|
TEST_20251216_2|SALARY |DECIMAL | | | 4| 8|
TEST_20251216_2|HIRE_DATE |DATETIME | | | 5| 0|
TEST_20251216_2|GENDER |CHAR | | | 4| 0|
TEST_20251216_2|IS_ACTIVE |VARCHAR | | | 4| 0|
1.3.2.12.1.8. all_objects视图
语法
支持
OWNER,
OBJECT_NAME,
SUBOBJECT_NAME,
OBJECT_ID,
DATA_OBJECT_ID,
OBJECT_TYPE,
CREATED,
LAST_DDL_TIME,
TIMESTAMP,
STATUS列
警告
all_objects 的owner 字段在目标库中仅仅指的是数据库名称,目标库可指用户或模式名称;
源库Oracle的all_objects 用户可查询显示当前用户有权限访问的(包括自己创建的和被授权的)的相关对象,而目标库all_objects可查询整个数据库的相关对象,若仅查询当前用户有权限访问的对象,可在where子句中对owner进行条件限制;
all_objects 的object_type 在目标库中包括TABLE、VIEW、INDEX、SEQUENCE;
目标库和源库的对oject_type类型定义不同,例如目标库的TABLE不仅仅指的单纯的表,还包含分区表的分区;
目标库和源库视图中部分列由于数据库的差异,生成内容就有差异,例如DATA_OBJECT_ID、OBJECT_ID等;
目标库视图里面的内容都是大写;
目标库视图字符字段的collation默认设置为utf8_general_ci,如果指定视图字符字段比较时候,要保持比较两端的collation一致,而源库就没有这样的要求;
示例
-- 创建表
CREATE TABLE test_table (
id INT PRIMARY KEY,
col INT
);
-- 创建索引
CREATE INDEX idx_test_col ON test_table(col);
-- 创建视图
CREATE OR REPLACE VIEW v_test_table AS
SELECT id, col FROM test_table;
-- 创建序列
CREATE SEQUENCE test_id_seq INCREMENT BY 1;
-- 转换前ORACLE SQL:
select
OWNER,
OBJECT_NAME,
SUBOBJECT_NAME,
OBJECT_ID,
DATA_OBJECT_ID,
OBJECT_TYPE,
CREATED,
LAST_DDL_TIME,
TIMESTAMP,
STATUS
from
all_objects
where
object_name in (UPPER('test_table'), UPPER('test_id_seq'), UPPER('idx_test_col'), UPPER('v_test_table')) ORDER BY object_name
OWNER |OBJECT_NAME |SUBOBJECT_NAME|OBJECT_ID|DATA_OBJECT_ID|OBJECT_TYPE|CREATED |LAST_DDL_TIME |TIMESTAMP |STATUS|
-------------+------------+--------------+---------+--------------+-----------+-----------------------+-----------------------+-------------------+------+
UNISQL |IDX_TEST_COL| | 154375| 154375|INDEX |2025-12-22 14:55:19.000|2025-12-22 14:55:19.000|2025-12-22:14:55:19|VALID |
UNISQL |TEST_ID_SEQ | | 154377| |SEQUENCE |2025-12-22 14:55:50.000|2025-12-22 14:55:50.000|2025-12-22:14:55:50|VALID |
UNISQL |TEST_TABLE | | 154372| 154372|TABLE |2025-12-22 14:55:19.000|2025-12-22 14:55:19.000|2025-12-22:14:55:19|VALID |
UNISQL |V_TEST_TABLE| | 154376| |VIEW |2025-12-22 14:55:19.000|2025-12-22 14:55:19.000|2025-12-22:14:55:19|VALID |
-- 转换后GoldenDB-Mysql SQL:
SELECT OWNER,OBJECT_NAME,SUBOBJECT_NAME,OBJECT_ID,DATA_OBJECT_ID,OBJECT_TYPE,CREATED,LAST_DDL_TIME,TIMESTAMP,STATUS FROM unisql.all_objects WHERE object_name IN (UPPER('test_table'),UPPER('test_id_seq'),UPPER('idx_test_col'),UPPER('v_test_table')) ORDER BY object_name
OWNER |OBJECT_NAME |SUBOBJECT_NAME|OBJECT_ID|DATA_OBJECT_ID|OBJECT_TYPE|CREATED |LAST_DDL_TIME |TIMESTAMP |STATUS|
---------+------------+--------------+---------+--------------+-----------+-----------------------+-----------------------+-------------------+------+
UNISQL |IDX_TEST_COL| | 673438| 500274|INDEX |2025-12-22 14:57:47.000|2025-12-22 14:57:47.000|2022-11-24 17:58:23|VALID |
UNISQL |TEST_ID_SEQ | | 537226| |SEQUENCE |2025-12-22 14:58:07.000|2025-12-22 14:58:07.000|2022-11-24 17:58:23|VALID |
UNISQL |TEST_TABLE | | 537104| |TABLE |2025-12-22 14:57:47.000|2025-12-22 14:57:47.000|2022-11-24 17:58:23|VALID |
UNISQL |V_TEST_TABLE| | 537105| |VIEW |2025-12-22 14:57:47.000|2025-12-22 14:57:47.000|2022-11-24 17:58:23|VALID |
1.3.2.12.1.9. user_objects视图
语法
支持
OBJECT_NAME,
SUBOBJECT_NAME,
OBJECT_ID,
DATA_OBJECT_ID,
OBJECT_TYPE,
CREATED,
LAST_DDL_TIME,
TIMESTAMP,
STATUS列
警告
user_objects 的object_type 在目标库中包括TABLE、VIEW、INDEX、SEQUENCE;
目标库和源库的对oject_type类型定义有差异,例如目标库的TABLE不仅仅指的单纯的表,还包含分区表的分区;
目标库和源库视图中部分列由于数据库的差异,生成内容就有差异,例如DATA_OBJECT_ID、OBJECT_ID等;
目标库视图里面的内容都是大写;
目标库视图字符字段的collation默认设置为utf8_general_ci,如果指定视图字符字段比较时候,要保持比较两端的collation一致,而源库就没有这样的要求;
示例
-- 创建表
CREATE TABLE test_table (
id INT PRIMARY KEY,
col INT
);
-- 创建索引
CREATE INDEX idx_test_col ON test_table(col);
-- 创建视图
CREATE OR REPLACE VIEW v_test_table AS
SELECT id, col FROM test_table;
-- 创建序列
CREATE SEQUENCE test_id_seq INCREMENT BY 1;
-- 转换前ORACLE SQL:
select
OBJECT_NAME,
SUBOBJECT_NAME,
OBJECT_ID,
DATA_OBJECT_ID,
OBJECT_TYPE,
CREATED,
LAST_DDL_TIME,
TIMESTAMP,
STATUS
from
user_objects
where
object_name in (UPPER('test_table'), UPPER('test_id_seq'), UPPER('idx_test_col'), UPPER('v_test_table')) ORDER BY object_name
OBJECT_NAME |SUBOBJECT_NAME|OBJECT_ID|DATA_OBJECT_ID|OBJECT_TYPE|CREATED |LAST_DDL_TIME |TIMESTAMP |STATUS|
------------+--------------+---------+--------------+-----------+-----------------------+-----------------------+-------------------+------+
IDX_TEST_COL| | 154375| 154375|INDEX |2025-12-22 14:55:19.000|2025-12-22 14:55:19.000|2025-12-22:14:55:19|VALID |
TEST_ID_SEQ | | 154377| |SEQUENCE |2025-12-22 14:55:50.000|2025-12-22 14:55:50.000|2025-12-22:14:55:50|VALID |
TEST_TABLE | | 154372| 154372|TABLE |2025-12-22 14:55:19.000|2025-12-22 14:55:19.000|2025-12-22:14:55:19|VALID |
V_TEST_TABLE| | 154376| |VIEW |2025-12-22 14:55:19.000|2025-12-22 14:55:19.000|2025-12-22:14:55:19|VALID |
-- 转换后GoldenDB-Mysql SQL:
SELECT OBJECT_NAME,SUBOBJECT_NAME,OBJECT_ID,DATA_OBJECT_ID,OBJECT_TYPE,CREATED,LAST_DDL_TIME,TIMESTAMP,STATUS FROM unisql.user_objects WHERE object_name IN (UPPER('test_table'),UPPER('test_id_seq'),UPPER('idx_test_col'),UPPER('v_test_table')) ORDER BY object_name
OBJECT_NAME |SUBOBJECT_NAME|OBJECT_ID|DATA_OBJECT_ID|OBJECT_TYPE|CREATED |LAST_DDL_TIME |TIMESTAMP |STATUS|
------------+--------------+---------+--------------+-----------+-----------------------+-----------------------+-------------------+------+
IDX_TEST_COL| | 673438| 500274|INDEX |2025-12-22 14:57:47.000|2025-12-22 14:57:47.000|2022-11-24 17:58:23|VALID |
TEST_ID_SEQ | | 537226| |SEQUENCE |2025-12-22 14:58:07.000|2025-12-22 14:58:07.000|2022-11-24 17:58:23|VALID |
TEST_TABLE | | 537104| |TABLE |2025-12-22 14:57:47.000|2025-12-22 14:57:47.000|2022-11-24 17:58:23|VALID |
V_TEST_TABLE| | 537105| |VIEW |2025-12-22 14:57:47.000|2025-12-22 14:57:47.000|2022-11-24 17:58:23|VALID |
1.3.2.12.1.10. all_users视图
语法
支持
USERNAME,
USER_ID,
CREATED列
警告
user_objects 的USERNAME 字段在目标库中仅仅指的是用户,目标库可指用户或模式名称;
目标库中的all_users视图中USER_ID内容为null,没有找到相应的映射字段;
目标库CREATED列不仅仅包含用户创建时间,还要修改用户密码的时间;
目标库视图里面的内容都是大写;
目标库视图字符字段的collation默认设置为utf8_general_ci,如果指定视图字符字段比较时候,要保持比较两端的collation一致,而源库就没有这样的要求;
示例
-- 转换前ORACLE SQL:
CREATE USER test_user1 IDENTIFIED BY password123 ;
SELECT USERNAME,USER_ID,CREATED FROM all_users WHERE USERNAME = UPPER('test_user1');
USERNAME |USER_ID|CREATED |
----------+-------+-----------------------+
TEST_USER1| 120|2025-12-22 16:30:36.000|
-- 转换后GoldenDB-Mysql SQL:
CREATE USER IF NOT EXISTS test_user1 IDENTIFIED BY 'password123';
SELECT USERNAME,USER_ID,CREATED FROM unisql.all_users WHERE USERNAME=UPPER('test_user1');
USERNAME |USER_ID|CREATED |
----------+-------+-----------------------+
TEST_USER1| |2025-12-22 16:31:09.000|
1.3.2.12.1.11. user_ind_columns视图
语法
支持
INDEX_NAME,
TABLE_NAME,
COLUMN_NAME,
COLUMN_POSITION,
COLUMN_LENGTH 列
警告
不区分表名、列名、索引名、数据库名的大小写;
需要保证用户名和数据库名相同,会将当前的数据库名当作用户名;
索引必须手动命名,系统自动命名的在两个库中不保证一致;
主键在Golden-Mysql中index_name为primary和oracle不一致;
COLUMN_LENGTH列在两个库中不保证一致;
示例
-- 转换前ORACLE SQL:
CREATE TABLE test_ind_columns_view(c1 int, c2 varchar(50), c3 varchar(60), c4 date, CONSTRAINT test_ind_columns_view_pk PRIMARY KEY (c1));
create index test_ind_columns_idx on test_ind_columns_view(c2, c3);
create unique index test_ind_columns_key on test_ind_columns_view(c4);
select INDEX_NAME, TABLE_NAME, COLUMN_NAME, COLUMN_POSITION, column_length From user_ind_columns where table_name = upper('test_ind_columns_view');
INDEX_NAME |TABLE_NAME |COLUMN_NAME|COLUMN_POSITION|COLUMN_LENGTH|
------------------------+---------------------+-----------+---------------+-------------+
TEST_IND_COLUMNS_IDX |TEST_IND_COLUMNS_VIEW|C3 | 2| 60|
TEST_IND_COLUMNS_KEY |TEST_IND_COLUMNS_VIEW|C4 | 1| 7|
TEST_IND_COLUMNS_VIEW_PK|TEST_IND_COLUMNS_VIEW|C1 | 1| 22|
TEST_IND_COLUMNS_IDX |TEST_IND_COLUMNS_VIEW|C2 | 1| 50|
-- 转换后GoldenDB-Mysql SQL:
CREATE TABLE test_ind_columns_view (c1 bigint,c2 varchar(50),c3 varchar(60),c4 datetime,PRIMARY KEY test_ind_columns_view_pk(c1));
CREATE INDEX test_ind_columns_idx ON test_ind_columns_view (c2, c3);
CREATE UNIQUE INDEX test_ind_columns_key ON test_ind_columns_view (c4);
SELECT INDEX_NAME,TABLE_NAME,COLUMN_NAME,COLUMN_POSITION,column_length FROM unisql.user_ind_columns WHERE table_name=upper('test_ind_columns_view');
+----------------------+-----------------------+-------------+-----------------+---------------+
| INDEX_NAME | TABLE_NAME | COLUMN_NAME | COLUMN_POSITION | COLUMN_LENGTH |
+----------------------+-----------------------+-------------+-----------------+---------------+
| PRIMARY | TEST_IND_COLUMNS_VIEW | C1 | 1 | 19 |
| TEST_IND_COLUMNS_IDX | TEST_IND_COLUMNS_VIEW | C2 | 1 | 50 |
| TEST_IND_COLUMNS_IDX | TEST_IND_COLUMNS_VIEW | C3 | 2 | 60 |
| TEST_IND_COLUMNS_KEY | TEST_IND_COLUMNS_VIEW | C4 | 1 | NULL |
+----------------------+-----------------------+-------------+-----------------+---------------+
1.3.2.12.1.12. all_ind_columns视图
语法
支持
INDEX_OWNER,
TABLE_OWNER,
INDEX_NAME,
TABLE_NAME,
COLUMN_NAME,
COLUMN_POSITION,
COLUMN_LENGTH 列
警告
不区分表名、列名、索引名、数据库名的大小写;
需要保证用户名和数据库名相同,会将当前的数据库名当作用户名;
索引必须手动命名,系统自动命名的在两个库中不保证一致;
主键在Golden-Mysql中index_name为primary和oracle不一致;
COLUMN_LENGTH列在两个库中不保证一致;
需要加上OWNER过滤条件,否则Golden-Mysql查询出来的会多;
示例
-- 转换前ORACLE SQL:
CREATE TABLE test_ind_columns_view(c1 int, c2 varchar(50), c3 varchar(60), c4 date, CONSTRAINT test_ind_columns_view_pk PRIMARY KEY (c1));
create index test_ind_columns_idx on test_ind_columns_view(c2, c3);
create unique index test_ind_columns_key on test_ind_columns_view(c4);
select INDEX_OWNER, INDEX_NAME, TABLE_OWNER, TABLE_NAME, COLUMN_NAME, COLUMN_POSITION, column_length From all_ind_columns where table_name = upper('test_ind_columns_view');
INDEX_OWNER|INDEX_NAME |TABLE_OWNER|TABLE_NAME |COLUMN_NAME|COLUMN_POSITION|COLUMN_LENGTH|
-----------+------------------------+-----------+---------------------+-----------+---------------+-------------+
AAA_USER |TEST_IND_COLUMNS_IDX |AAA_USER |TEST_IND_COLUMNS_VIEW|C3 | 2| 60|
AAA_USER |TEST_IND_COLUMNS_KEY |AAA_USER |TEST_IND_COLUMNS_VIEW|C4 | 1| 7|
AAA_USER |TEST_IND_COLUMNS_VIEW_PK|AAA_USER |TEST_IND_COLUMNS_VIEW|C1 | 1| 22|
AAA_USER |TEST_IND_COLUMNS_IDX |AAA_USER |TEST_IND_COLUMNS_VIEW|C2 | 1| 50|
-- 转换后GoldenDB-Mysql SQL:
CREATE TABLE test_ind_columns_view (c1 bigint,c2 varchar(50),c3 varchar(60),c4 datetime,PRIMARY KEY test_ind_columns_view_pk(c1));
CREATE INDEX test_ind_columns_idx ON test_ind_columns_view (c2, c3);
CREATE UNIQUE INDEX test_ind_columns_key ON test_ind_columns_view (c4);
SELECT INDEX_OWNER,INDEX_NAME,TABLE_OWNER,TABLE_NAME,COLUMN_NAME,COLUMN_POSITION,column_length FROM unisql.all_ind_columns WHERE table_name=upper('test_ind_columns_view');
+-------------+----------------------+-------------+-----------------------+-------------+-----------------+---------------+
| INDEX_OWNER | INDEX_NAME | TABLE_OWNER | TABLE_NAME | COLUMN_NAME | COLUMN_POSITION | COLUMN_LENGTH |
+-------------+----------------------+-------------+-----------------------+-------------+-----------------+---------------+
| AAAAA11111 | PRIMARY | AAAAA11111 | TEST_IND_COLUMNS_VIEW | C1 | 1 | 19 |
| AAAAA11111 | TEST_IND_COLUMNS_IDX | AAAAA11111 | TEST_IND_COLUMNS_VIEW | C2 | 1 | 50 |
| AAAAA11111 | TEST_IND_COLUMNS_IDX | AAAAA11111 | TEST_IND_COLUMNS_VIEW | C3 | 2 | 60 |
| AAAAA11111 | TEST_IND_COLUMNS_KEY | AAAAA11111 | TEST_IND_COLUMNS_VIEW | C4 | 1 | NULL |
+-------------+----------------------+-------------+-----------------------+-------------+-----------------+---------------+
1.3.2.12.2. Tdsql_Pg_Oracle
1.3.2.12.2.1. ALL_OBJECTS视图
语法
支持
OWNER,
OBJECT_NAME,
SUBOBJECT_NAME,
OBJECT_ID,
DATA_OBJECT_ID,
OBJECT_TYPE,
CREATED,
LAST_DDL_TIME,
TIMESTAMP,
STATUS列
警告
all_objects 的owner 字段在oracle中指的是用户(模式名),在目标库tdsql-pg-oracle指模式名称;
SUBOBJECT_NAME、CREATED、LAST_DDL_TIME、TIMESTAMP 表示可分区对象子组件名称的字段、系统字典中原生维护对象创建时间、最近一次 DDL 时间及对象定义时间戳,在tdsql-pg-oracle中直接取null,属于语义降级;
object_type字段,包含TABLE、VIEW、INDEX、SEQUENCE、FUNCTION、PROCEDURE,没有包含PACKAGE;
目标库和源库视图中部分列由于数据库的差异,生成内容就有差异,例如DATA_OBJECT_ID、OBJECT_ID等;
为了和oracle保持一致使用user_tables视图时,目标库自定义视图后的OWNER , OBJECT_NAME 都转成了大写;
all_objects在oracle中可返回是当前用户有权限访问的所有对象,在目标库tdsql-pg-oracle中更接近于“系统可见对象集合”,而非严格意义上的“当前用户可访问对象集合”。
示例
-- 创建表
CREATE TABLE t_simple (
id NUMBER PRIMARY KEY,
name VARCHAR2(50)
);
-- 创建视图
CREATE OR REPLACE VIEW v_simple AS
SELECT id, name
FROM t_simple;
-- 创建序列
CREATE SEQUENCE seq_simple
START WITH 1;
-- 创建函数
CREATE OR REPLACE FUNCTION f_upper_name (
p_name VARCHAR2
)
RETURN VARCHAR2
AS
BEGIN
RETURN UPPER(p_name);
END;
-- 创建索引
CREATE INDEX idx_t_simple_name
ON t_simple (name);
-- 创建函数
CREATE OR REPLACE FUNCTION f_upper_name (
p_name VARCHAR2
)
RETURN VARCHAR2
AS
BEGIN
RETURN UPPER(p_name);
END;
-- 创建存储过程
CREATE OR REPLACE PROCEDURE p_insert_simple (
p_id NUMBER,
p_name VARCHAR2
)
AS
BEGIN
INSERT INTO t_simple (id, name)
VALUES (p_id, p_name);
END;
-- 转换前ORACLE SQL:
SELECT
OWNER,
OBJECT_NAME,
SUBOBJECT_NAME,
OBJECT_ID,
DATA_OBJECT_ID,
OBJECT_TYPE,
CREATED,
LAST_DDL_TIME,
TIMESTAMP,
STATUS
FROM
ALL_OBJECTS
WHERE OBJECT_NAME IN('T_SIMPLE','IDX_T_SIMPLE_NAME','V_SIMPLE','F_UPPER_NAME','P_INSERT_SIMPLE','SEQ_SIMPLE')
ORDER BY OBJECT_NAME
OWNER |OBJECT_NAME |SUBOBJECT_NAME|OBJECT_ID|DATA_OBJECT_ID|OBJECT_TYPE|CREATED |LAST_DDL_TIME |TIMESTAMP |STATUS|
-------------+-----------------+--------------+---------+--------------+-----------+-----------------------+-----------------------+-------------------+------+
UNISQL |F_UPPER_NAME | | 160443| |FUNCTION |2026-01-23 11:07:42.000|2026-01-23 11:07:42.000|2026-01-23:11:07:42|VALID |
UNISQL |IDX_T_SIMPLE_NAME| | 160444| 160444|INDEX |2026-01-23 11:11:10.000|2026-01-23 11:11:10.000|2026-01-23:11:11:10|VALID |
UNISQL |P_INSERT_SIMPLE | | 160252| |PROCEDURE |2026-01-22 10:18:42.000|2026-01-23 11:07:49.000|2026-01-23:11:07:49|VALID |
UNISQL |SEQ_SIMPLE | | 160442| |SEQUENCE |2026-01-23 11:07:42.000|2026-01-23 11:07:42.000|2026-01-23:11:07:42|VALID |
UNISQL |T_SIMPLE | | 160440| 160440|TABLE |2026-01-23 11:07:42.000|2026-01-23 11:07:42.000|2026-01-23:11:07:42|VALID |
UNISQL |V_SIMPLE | | 160249| |VIEW |2026-01-23 11:07:42.000|2026-01-23 11:07:42.000|2026-01-23:11:07:42|VALID |
-- 转换后GoldenDB-Mysql SQL:
SELECT OWNER,OBJECT_NAME,SUBOBJECT_NAME,OBJECT_ID,DATA_OBJECT_ID,OBJECT_TYPE,CREATED,LAST_DDL_TIME,TIMESTAMP,STATUS FROM unisql.ALL_OBJECTS WHERE OBJECT_NAME IN ('T_SIMPLE','IDX_T_SIMPLE_NAME','V_SIMPLE','F_UPPER_NAME','P_INSERT_SIMPLE','SEQ_SIMPLE') ORDER BY OBJECT_NAME
OWNER |OBJECT_NAME |SUBOBJECT_NAME|OBJECT_ID|DATA_OBJECT_ID|OBJECT_TYPE|CREATED|LAST_DDL_TIME|TIMESTAMP|STATUS|
------+-----------------+--------------+---------+--------------+-----------+-------+-------------+---------+------+
UNISQL|F_UPPER_NAME | | 1122799| |FUNCTION | | | |VALID |
UNISQL|IDX_T_SIMPLE_NAME| | 1122798| 1122798|INDEX | | | |VALID |
UNISQL|P_INSERT_SIMPLE | | 1122800| |PROCEDURE | | | |VALID |
UNISQL|SEQ_SIMPLE | | 1122796| |SEQUENCE | | | |VALID |
UNISQL|T_SIMPLE | | 1122743| 1122743|TABLE | | | |VALID |
UNISQL|V_SIMPLE | | 1122792| |VIEW | | | |VALID |