資料庫遷移不僅是腳本轉換,更涉及應用程式 SQL 改寫。本案例環境為 SQL Server 2008 → Oracle 9i,工具採用 Sybase PowerDesigner 12 試用版 進行模型逆向/正向工程,PL/SQL Developer 7.1.5 驗證腳本正確性。
| SQL Server | Oracle | 說明 |
|---|---|---|
[TableName], [Column] | TableName, Column | 移除方括號,Oracle 不支援 |
參數前綴 @ | 參數前綴 : | 如 @UserID → :UserID |
GETDATE() | SYSDATE / CURRENT_TIMESTAMP | 日期時間函數對照 |
ISNULL(expr, val) | NVL(expr, val) / COALESCE | 建議用 ANSI 標準 COALESCE |
TOP N | ROWNUM <= N 或 FETCH FIRST N ROWS ONLY (12c+) | 分頁寫法差異大,需重構 |
IDENTITY | SEQUENCE + TRIGGER / IDENTITY (12c+) | 自增欄需建立序列與觸發器 |
NVARCHAR(4000) | NVARCHAR2(2000) (字元語意) | Oracle NVARCHAR2 以字元計,實際位元組上限較小 |
SQL Server 允許的識別碼(如 ORDER, GROUP, USER)在 Oracle 為保留字。解法:PowerDesigner 產生腳本時自動加雙引號 "ORDER",但建議統一重新命名避免後續維護麻煩。
NVARCHAR(4000) 可存 4000 個中文字(雙位元組)。NVARCHAR2(4000) 以字元為單位,但受限於 4000 位元組上限,實際僅能存約 2000 個中文字。CLOB 或評估是否需擴充欄位長度。Oracle 物件名稱上限 30 字元。PowerDesigner 產生的名稱常超標,需建立命名規範對照表,批次重命名。
預設輸出 CREATE TABLE "SCHEMA"."TABLE",導致大小寫敏感且需永遠加引號。建議在模型層級關閉「加引號」選項,或腳本後處理移除。