2011-08-31 221 views
3

我有一個需要將信息發送到Oracle存儲過程的SQL Server存儲過程。從SQL Server存儲過程執行Oracle存儲過程

我該如何設置?它應該是一個鏈接服務器?我如何編寫代碼來傳遞和執行存儲過程?

+1

你說** ** SQL(結構化查詢語言),但你真的是**的SQL Server **(微軟關係型數據庫系統) - 右? Oracle也與SQL一起工作 - IBM DB2,Informix,Firebird,MySQL也是如此 - 你的名字是...... –

+0

對,SQL Server(我假設你爲我編輯過):) – Miles

+0

我認爲這就是你這意味着 - 是的,我相應地更新了你的帖子。 –

回答

1

原來我最後不得不使用微軟CLR和以處理服務器之間被推變量寫我自己的小C#應用程序。下面是我所做的:

  1. C#應用程序開始在窗口
  2. 應用程序執行SQL Server存儲過程的計劃任務,並得到返回值
  3. 應用程序,然後執行適當的值
  4. 的Oracle存儲過程
2

這是語法,我可能會從一開始就嘗試:

SELECT * FROM OPENQUERY(<linked server name>, '{CALL <oracle sp>}') 

我所看到的(我沒有嘗試這樣做我自己)是,你還可以使用OPENQUERY調用一個Oracle函數然後可以調用存儲過程,也可以將存儲過程轉換爲函數。然後從SQL Server的連接將是這個樣子:

SELECT * FROM OPENQUERY(<linked server name>, 'SELECT <oracle function> FROM dual') 
+0

因此,讓我在那裏再添加一個扳手,我將在Oracle上執行一個sproc,它接收來自我的輸入參數,並具有需要捕獲的輸出參數...我使用什麼語法? – Miles

+0

在我的答案中使用語法來獲取輸出參數。 – hagensoft

1

您還可以使用:

DECLARE @outputParameter int 
EXEC ('BEGIN <procedureName>(?,?); END;', @inputParameter , @outputParameter OUTPUT) at <linkedServerName> 

這使得帽圖靈輸出參數

2

Oracle服務器中的程序「TestingProcedure」。

SQL Server中的鏈接服務器「LinkedServer」。

呼叫TestingProcedure在SQL服務器例如:

EXECUTE ('begin TestingProcedure; end;') AT LinkedServer;