由於SSIS看似簡單 但是實作起來問題實在太多
最後還是採取熟悉的Store Procedure
在SSMS當中 要取得別台SQL Server的資料算是很簡單
只要加上Linked Server 就可以用完整的Table名稱來操作
但是要取得Oracle的資料 就比較麻煩點
先安裝Oracle Client
在安裝選定的路徑下D:\oracle\product\10.2.0\client_2\NETWORK\ADMIN
會有一個tnsnames.ora檔案
編輯此檔案加入以下
TC_188 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.113.2.188)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = tc)
)
)
在SSMS當中新增連結的伺服器(Linked Server)
提供者選擇Microsoft OLE DB Provider for Oracle
資料來源就輸入在連線設定檔中的TC_188 伺服器名稱可以自訂
在此以Ora為例
建立連線後就可以用以下語法讀取Oracle
select * into #tmp
from OPENQUERY (Ora,N'select * from OWNERNAME.TABLENAME')
我的做法就是把要處理的資料先寫入tempdb
這樣接下來的處理就不必考慮Oracle的語法問題
如果要回寫一些資訊回到Oracle 可以用以下語法
update OPENQUERY(Ora,'select C1,C2,C3 from OWNERNAME.TABLENAME
where C4 = ''Sobi'' and C5 = ''Chen'' ')
set C1= 'F',C3 = @@error where C3 = @C3
update條件式與要更新的欄位都需要出現在查詢式當中
Oracle 對欄位的大小寫滿敏感的
OWNERNAME 不輸入的話也常常會有錯誤
初次接觸Oracle 寫得不甚詳盡
如有錯誤 還請各位高手指點
No comments:
Post a Comment