统一SQL介绍
https://www.light-pg.com/docs/LTSQL/current/index.html
源和目标
源数据库:Oracle
目标数据库:Postgresql,TDSQL-MySQL,达梦8,LightDB-Oracle
操作目标
通过统一SQL,将Oracle中的number/decimal/dec/numeric转换到目标库适配的数据类型。
统一SQL转换
Oracle2Posgresql
number类型
Oracle 数据类型 | 精度(p) | 标度(s) | 转换后 PostgreSQL 数据类型 | 示例 |
number | decimal | number —– decimal | ||
number(*) | decimal | number(*) —– decimal | ||
number(*,0) | decimal(38,0) | number(*,0)—-decimal(38,0) | ||
number(*,s) | s > 0 | decimal(38,s) | number(*,2)—-decimal(38,2) | |
number(p) / number(p,0) | p>0 | 空 或 0 | decimal(p) | number(4,0)—–decimal(4) |
number(p,s) | p>0 | s>0 | decimal(p,s) | number(10,2)—–decimal(10,2) |
使用案例:
-- 转换前Oracle SQL:
CREATE TABLE unisql_number_t(c1 NUMBER,c2 NUMBER(*),c3 NUMBER(*,0),c4 NUMBER(*,2),c5 NUMBER(4),c6 NUMBER(4,0),c7 NUMBER(10,2));
-- 转换后PostgreSQL SQL:
CREATE TABLE unisql_number_t (c1 decimal,c2 decimal,c3 decimal(38,0),c4 decimal(38,2),c5 decimal(4),c6 decimal(4),c7 decimal(10,2))
decimal类型
Oracle 数据类型 | 精度(p) | 标度(s) | 转换后 PostgreSQL 数据类型 | 示例 |
decimal | decimal(38,0) | decimal —– decimal(38,0) | ||
decimal(*) | decimal(38,0) | decimal(*) —– decimal(38,0) | ||
decimal(*,0) | decimal(38,0) | decimal(*,0)—-decimal(38,0) | ||
decimal(*,s) | s > 0 | decimal(38,s) | decimal(*,2)—-decimal(38,2) | |
decimal(p) / decimal(p,0) | p>0 | 空 或 0 | decimal(p) | decimal(4,0)—–decimal(4) |
decimal(p,s) | p>0 | s>0 | decimal(p,s) | decimal(10,2)—–decimal(10,2) |
使用案例:
-- 转换前Oracle SQL:
CREATE TABLE unisql_decimal_t(c1 decimal,c2 decimal(*),c3 decimal(*,0),c4 decimal(*,2),c5 decimal(4),c6 decimal(4,0),c7 decimal(10,2));
-- 转换后PostgreSQL SQL:
CREATE TABLE unisql_decimal_t (c1 decimal(38,0),c2 decimal(38,0),c3 decimal(38,0),c4 decimal(38,2),c5 decimal(4),c6 decimal(4),c7 decimal(10,2))
dec类型
Oracle 数据类型 | 精度(p) | 标度(s) | 转换后 PostgreSQL 数据类型 | 示例 |
dec | dec(38,0) | dec—– dec(38,0) | ||
dec(*) | dec(38,0) | dec(*) —– dec(38,0) | ||
dec(*,0) | dec(38,0) | dec(*,0)—-dec(38,0) | ||
dec(*,s) | s > 0 | dec(38,s) | dec(*,2)—-dec(38,2) | |
dec(p) / dec(p,0) | p>0 | 空 或 0 | dec(p) | dec(4,0)—–dec(4) |
dec(p,s) | p>0 | s>0 | dec(p,s) | dec(10,2)—–dec(10,2) |
使用案例:
-- 转换前Oracle SQL:
CREATE TABLE unisql_dec_t(c1 dec,c2 dec(*),c3 dec(*,0),c4 dec(*,2),c5 dec(4),c6 dec(4,0),c7 dec(10,2));
-- 转换后PostgreSQL SQL:
CREATE TABLE unisql_dec_t (c1 dec(38,0),c2 dec(38,0),c3 dec(38,0),c4 dec(38,2),c5 dec(4),c6 dec(4),c7 dec(10,2))
numeric类型
Oracle 数据类型 | 精度(p) | 标度(s) | 转换后 PostgreSQL 数据类型 | 示例 |
numeric | numeric(38,0) | numeric—– numeric(38,0) | ||
numeric(*) | numeric(38,0) | numeric(*) —– numeric(38,0) | ||
numeric(*,0) | numeric(38 |