2011-05-10 202 views
3

我正在使用SSIS 2008,並且在調用具有輸出參數的Oracle存儲過程時遇到問題。使用輸出參數調用Oracle存儲過程

我調用存儲過程在sqlplus這樣的:

var vresult number; 
exec my_stored_procedure(:vresult); 
print vresult; 

的報表工作,我得到的輸出,我需要。我試圖在SSIS中做類似的事情,但我需要重複執行此操作,也許在ForEach或腳本中使用調用存儲過程的結果更新臨時結果集(存儲過程會生成一個數字,而且我需要將該數字添加到只包含某些狀態信息的結果集中的每一行)。

我嘗試了很多不同的方法,總是以'無效聲明'或類似的錯誤結束。

我也曾嘗試以下方法:

  1. How to resolve SQL query parameters mapping issues while using Oracle OLE DB provider?

  2. Update a row in oracle using OLEDB command(SSIS)

  3. Oracle variables

問題的癥結似乎是存儲過程的輸出參數。

我曾嘗試使用OLE DB的Oracle提供程序。有任何想法嗎?

+0

在SSIS上過了一段時間,但是您是否將參數Direction設置爲Output? – tbone 2011-05-10 19:06:59

+0

是的,我設置參數方向輸出,並已經檢查了大約一千倍,現在:) – 2011-05-10 20:54:40

回答

1

我想出了一個可行的解決方案:

  • 使用「聲明」和「結束」構建
  • 結合了「立即執行」
  • 添加了「使用「聲明給exec立即結束注入可變

所以實現這個可能是這個樣子的腳本:

declare 
myVar number; 
myStatement varchar2(50); 
begin 
    myStatement:='exec myProc(:1)'; 
    execute immediate myStatement using output myVar; 
end; 

將此腳本粘貼到Execute SQL任務中,設置任務的屬性並且它可以工作!

我是Oracle的新手,但看起來像:1符號是變量的佔位符。你也可以使用sqlplus來測試它 - 只需將代碼保存在一個文件中,然後在命令行中使用@選項啓動sqlplus即可。

唯一的問題:我無法在SSIS使用變量的值,但這是另一個問題。

2

如果您試圖調用Oracle PLSQL中的存儲過程,此鏈接非常簡短。 http://plsql-tutorial.com/plsql-passing-parameters-procedure-function.htm

如果您在Java工作,那麼。聲明對象 java.sql.CallableStatement ps; ps.registerOutParameter(parameterIndex,sqlType);

同樣.Net或任何其他平臺必須具有相同的信念。希望如此:)

+1

感謝您的回覆。我已經有了這些信息,而且我的問題特別與SQL Server Integration Services(SSIS)有關。 – 2011-05-10 14:49:13

0

你幾乎沒有。爲了找回在SSIS的Oracle存儲過程的輸出參數的值,這裏是爲我工作

在執行SQL任務,粘貼在SQL語句框

declare 
vresult number; 

begin 
    my_stored_procedure(vresult); 
    ?:=vresult; 
end; 

在參數映射,確保通過將方向設置爲「輸出」並將參數名稱設置爲「0」(如果它是第一個參數),將您的SSIS變量映射到存儲過程的此輸出

PS:確保Oracle輸出變量數據類型匹配您的SSIS變量

謝謝 Mezue

相關問題