程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL SERVER 向ORACLE 8遷移的技術實現方案

SQL SERVER 向ORACLE 8遷移的技術實現方案

編輯:關於SqlServer
數據庫端SQL語法的遷移
以下為常用的SQL語法遷移,包括數據類型、ID列向SEQUENCE遷移、表(主鍵、外鍵、CHECK、UNIQUE、DEFAULT、

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;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved