首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 遷移至 Oracle 8 技術實作指南:資料型別、Identity 與架構對照

     編輯:關於SqlServer

遷移概述

將 SQL Server (T-SQL) 資料庫遷移至 Oracle 8 (PL/SQL) 涉及資料型別對應、Identity 欄位轉換、約束條件、游標、預存程序、函數、觸發器等多層面調整。本文提供核心語法對照表與遷移策略。

資料型別對應表

SQL ServerOracle 8備註
DECIMAL[(P[,S])]NUMBER[(P[,S])]精確數值
NUMERIC[(P[,S])]NUMBER[(P[,S])]精確數值
FLOAT[(N)]NUMBER[(N)]近似數值
INT / SMALLINT / TINYINTNUMBER整數統一對應
MONEY / SMALLMONEYNUMBER(19,4)貨幣型別
CHAR[(N)]CHAR[(N)]固定長度字串
VARCHAR[(N)]VARCHAR2[(N)]變動長度字串
DATETIME / SMALLDATETIMEDATE日期時間統一對應
TEXTCLOB大型文字
IMAGEBLOB二進位大物件
BITNUMBER(1)布林值對應

實務建議:金額欄位原用 MONEY,遷移時依精度需求調整為 NUMBER(14,2) (金額) 或 NUMBER(10,4) (單價)。

Identity 欄位轉換為 Sequence

SQL Server 使用 IDENTITY(1,1) 自動遞增主鍵;Oracle 無此語法,需建立 Sequence 搭配觸發器或應用層指派。

SQL Server 範例

jlbh NUMERIC(12,0) IDENTITY(1,1)
CONSTRAINT PK_tbl_example PRIMARY KEY (jlbh)

Oracle 實作

-- 1. 建立資料表
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
CREATE SEQUENCE SEQ_LT_AREA
    START WITH 1
    INCREMENT BY 1
    NOCACHE
    NOCYCLE;

-- 3. 觸發器自動填入 (可選)
CREATE OR REPLACE TRIGGER TRG_LT_AREA_BI
BEFORE INSERT ON LT_AREA
FOR EACH ROW
WHEN (NEW.area_id IS NULL)
BEGIN
    SELECT SEQ_LT_AREA.NEXTVAL INTO :NEW.area_id FROM DUAL;
END;

其他遷移重點

  • 表約束:PRIMARY KEY、FOREIGN KEY、CHECK、UNIQUE、DEFAULT 語法大同小異,注意 Oracle 不支援 CLUSTERED/NONCLUSTERED 索引區分
  • 游標:Oracle 隱性游標較常用,顯性游標需明確 OPEN/FETCH/CLOSE
  • 預存程序/函數:T-SQL 批次語法轉為 PL/SQL 區塊結構,注意參數模式 (IN/OUT/IN OUT)
  • 觸發器:Oracle 支援 BEFORE/AFTER、ROW/STATEMENT 級別,語法更豐富
  • 常用函數:GETDATE() → SYSDATE、ISNULL() → NVL()、CONVERT() → TO_CHAR/TO_DATE

遷移前建議先用工具產生目標 DDL,再人工微調型別與業務邏輯;大型系統分階段驗證,確保資料完整性與效能達標。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved