專案需將 SQL Server 2005 合約管理資料 (contract, contract_project) 同步至 Oracle 9i MIS 系統。採用 **連結伺服器 + SQL Agent 排程** 實作。
資料型別對應查詢:
SELECT * FROM msdb.dbo.MSdatatype_mappings; -- SQL→Oracle 簡易對應
SELECT * FROM msdb.dbo.sysdatatypemappings; -- 詳細跨 DBMS 型別對應
關鍵對應 (節錄):
| SQL Server | Oracle |
|---|---|
| INT | NUMBER(10) |
| BIGINT | NUMBER(19) |
| VARCHAR(n) | VARCHAR2(n) |
| NVARCHAR(n) | NVARCHAR2(n) |
| DATETIME | DATE |
| MONEY | NUMBER(19,3) |
| UNIQUEIDENTIFIER | CHAR(38) |
| VARBINARY(MAX) | BLOB |
| XML | CLOB / XMLTYPE |
EXEC sp_addlinkedserver
@server = 'ORA_MIS',
@srvproduct = 'Oracle',
@provider = 'OraOLEDB.Oracle', -- 需安裝 Oracle OLE DB Provider
@datasrc = 'ORCL'; -- TNS 服務名
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'ORA_MIS',
@useself = 'FALSE',
@locallogin = NULL,
@rmtuser = 'mis_user',
@rmtpassword = 'mis_pwd';
CREATE PROCEDURE usp_Sync_Contract_To_Oracle
AS
BEGIN
SET NOCOUNT ON;
-- 使用 OPENQUERY 執行 Oracle MERGE (需 Oracle 9i+)
INSERT INTO OPENQUERY(ORA_MIS, 'SELECT CONTRACT_ID, COL1, COL2 FROM CONTRACT')
SELECT CONTRACT_ID, COL1, COL2 FROM dbo.contract WHERE LastSync > @LastRun;
-- 實際建議使用 MERGE 或分開 INSERT/UPDATE 邏輯
END
usp_Sync_Contract_To_Oracle。