依來源資料欄名稱區分的自訂對應
或者,透過完整和局部限定的資料欄名稱,加上萬用字元和區分大小寫的支援:
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)'