自定义按源列名称映射

或者通过支持通配符和区分大小写的全限定列名和部分限定列名:

AUTOSCHEMAOPTIONS TYPEMAP column = 'varchar(100)'
AUTOSCHEMAOPTIONS TYPEMAP table.column = 'int'
AUTOSCHEMAOPTIONS TYPEMAP schema.table.column = 'double'
AUTOSCHEMAOPTIONS TYPEMAP catalog.schema.table.column = 'timestamp'
AUTOSCHEMAOPTIONS TYPEMAP *cust*.column = 'bigint'
AUTOSCHEMAOPTIONS TYPEMAP "cust*"."column" = 'decimal(5,2)'

示例:

源是 SQL Server:

CREATE TABLE dbo.customer(id int not null primary key, name varchar(200), address varchar(2000), city varchar(200), state char(2), zipcode char(5));

目标是 Oracle:

MAP dbo.customer, TARGET dept.customer;

SQL Server 的 varchar(p) 将自动转换为 Oracle 的 VARCHAR2(p):

CREATE TABLE dept.customer(id number(11), name varchar2(200), address varchar2(2000), city varchar2(200), state char(2), zipcode char(5), PRIMARY KEY (id));

可以手动将 char 映射到 varchar2(p),如以下示例中所示:

-- Map SQL Server char to varchar2
AUTOSCHEMAOPTIONS TYPEMAP 'char' = 'varchar2(%p)'

如果源字符没有精度,则必须使用 %l 指定目标字符类型的精度。例如,tinyint 的范围为 0 到 255,最大字符长度为 3,因此目标列将创建为 varchar2(3)。

AUTOSCHEMAOPTIONS TYPEMAP 'tinyint' = 'varchar2(%l)'

还可以按源表和列名指定数据类型映射:

-- any sale_amt column
AUTOSCHEMAOPTIONS TYPEMAP sale_amt = 'decimal(20,2)'

-- only sale_amt column in table sales in any schema
AUTOSCHEMAOPTIONS TYPEMAP sales.sale_amt = 'decimal(20,2)'

-- only amount column in table sales in schema dbo
AUTOSCHEMAOPTIONS TYPEMAP dbo.sales.sale_amt = 'decimal(20,2)'

-- using wildcard
AUTOSCHEMAOPTIONS TYPEMAP *_amt = 'decimal(20,2)'
AUTOSCHEMAOPTIONS TYPEMAP dbo.sales.*_amt = 'decimal(20,2)'
AUTOSCHEMAOPTIONS TYPEMAP dbo.s*.*_amt = 'decimal(20,2)'