INDEX)、游標、存儲過程、函數、觸發器、常用SQL語法與函數幾個方面,考慮SQL Server的實際情況,沒有涉及
Oracle特有的PACKAGE、EXCEPTION等。在以下的描述中,將SQL Server的TRANSACT-SQL簡稱為T-SQL。在Oracle中
,其語法集稱為PL/SQL。
<一> 數據類型的遷移
<1>、Oracle端語法說明
在Oracle中,分析其數據類型,大致可分為數字、字符、日期時間和特殊四大類。其中,數字類型有NUMBER;字符
類型有CHAR與VARCHAR2;日期時間類型只有DATE一種;除此之外,LONG、RAW、LONG RAW、BLOB、CLOB和BFILE等數
據類型都可視為特殊數據類型。
<2>、SQL Server端語法說明
在SQL Server中,參照上面對Oracle的劃分,數據類型也大致可分為數字、字符、日期時間和特殊四大類。數字類
型又可分為精確數值、近似數值、整數、二進制數、貨幣等幾類,其中,精確數值有DECIMAL[(P[, S])]與
NUMERIC[(P[, S])];近似數值有FLOAT[(N)];整數有INT、SMALLINT、TINYINT;二進制數有BINARY[(N)]、
VARBINARY[(N)];貨幣有MONEY、SMALLMONEY。字符類型有CHAR[(N)]與VARCHAR[(N)]。日期時間類型有DATETIME、
SMALLDATETIME。除此之外,BIT、TIMESTAMP、TEXT和IMAGE、BINARY VARING等數據類型都可視為特殊數據類型。
<3>、從SQL Server向Oracle的遷移方案
比較Oracle與SQL SERVER在數據類型上的不同,當從SQL Server向Oracle遷移時,可以做如下調整:
SQL Server
Oracle
數字類型
DECIMAL[(P[, S])]
NUMBER[(P[, S])]
NUMERIC[(P[, S])]
NUMBER[(P[, S])]
FLOAT[(N)]
NUMBER[(N)]
INT
NUMBER
SMALLINT
NUMBER
TINYINT
NUMBER
MONEY
NUMBER[19,4]
SMALLMONEY
NUMBER[19,4]
字符類型
CHAR[(N)]
CHAR[(N)]
VARCHAR[(N)]
VARCHAR2[(N)]
日期時間類型
DATETIME
DATE
SMALLDATETIME
DATE
其它
TEXT
CLOB
IMAGE
BLOB
BIT
NUMBER(1)
方法:
公司原系統中的Money 用於金額時轉換用number(14,2);用於單價時用 number(10,4)代替;
<二> ID列向SEQUENCE遷移
<1>、SQL Server端語法說明
在SQL Server中,可以將數據庫中的某一字段定義為IDENTITY列以做主鍵識別,如:
jlbh numeric(12,0) identity(1,1) /*記錄編號字段*/
CONSTRAINT PK_tbl_example PRIMARY KEY nonclustered (jlbh) /*主鍵約束*/
在這裡,jlbh是一個ID列,在向具有該列的表插入記錄時,系統將從1開始以1的步長自動對jlbh的值進行維護。
<2>、Oracle端語法說明
但在Oracle中,沒有這樣的ID列定義,而是采用另一種方法,即創建SEQUENCE。
如:
/*--1、創建各使用地區編碼表--*/
drop table LT_AREA;
create table LT_AREA
(
area_id number(5,0) NOT NULL, /*地區編碼*/
area_name varchar2(20) NOT NULL, /*地區名稱*/
constraint PK_LT_AREA PRIMARY KEY(area_id)
);
/*--2、創建SEQUENCE,將列area_id 類ID化--*/
drop sequence SEQ_LT_AREA;