簡體   English   中英

在 SSIS 2008 的腳本任務中使用 Oracle ODBC 驅動程序時出現問題

[英]Issue using Oracle ODBC driver in Script Task in SSIS 2008

我遇到的問題可能與 SSIS 沒有任何關系,但我想徹底。 我試圖讓基本相同的代碼(使用 ODBC)訪問 SQL 服務器、Sybase 和 Oracle。 除了 Oracle 之外的所有東西都在工作(並不奇怪),但我不知道如何解決這個問題。

Oracle驅動是11.01.00.06版本。 我能夠成功連接到實例,但調用(對函數)失敗。 我猜這個錯誤與 cursor 在這種情況下是一個參數有關(對於 SQL 服務器和 Sybase 來說不是這樣),我沒有考慮到它。 cursor 沒有 OdbcType。

任何幫助或建議將不勝感激。

我得到的錯誤是 - 錯誤 [07001] [Oracle][ODBC][Ora]ORA-01008: not all variables bound

調用代碼 (C#)

    NetworkProviderCon = new OdbcConnection(strCon);
    NetworkProviderCon.Open();
    NetworkProviderCmd.Connection = NetworkProviderCon;

    NetworkProviderCmd.CommandType = CommandType.StoredProcedure;

    NetworkProviderCmd.CommandText = "{CALL SP_NETWORK_IDL(?,?)}";

    NetworkProviderCmd.CommandTimeout = this.Variables.CADATABASECORETIMEOUT;

    //parameters to call SP   
    NetworkProviderParam1 = NetworkProviderCmd.Parameters.Add("@pdtStartTime", OdbcType.DateTime);
    NetworkProviderParam1.Value = strStartDate;
    NetworkProviderParam2 = NetworkProviderCmd.Parameters.Add("@pdtEndTime", OdbcType.DateTime);
    NetworkProviderParam2.Value = strEndDate;
    sqlDr = NetworkProviderCmd.ExecuteReader();

程序參數

CREATE OR REPLACE function XXXX.SP_NETWORK_IDL
(
/*************************************************
** Declare Parameters                           **
*************************************************/

   pRESULT_CURSOR IN OUT CURSOR_PACKAGE.RESULT_CURSOR               ,
   pdtStartTime   IN     CMC_NWPR_RELATION.NWPR_TERM_DT%TYPE := NULL,
   pdtEndTime     IN     CMC_NWPR_RELATION.NWPR_EFF_DT%TYPE  := NULL
)
return number

您的 function 請求 3 個參數,但您只傳遞了 2 個。

NetworkProviderCmd.Parameters.Add
  ("@pRESULT_CURSOR", OracleType.Cursor).Direction = ParameterDirection.InputOutput;
//NetworkProviderCmd.Parameters["pRESULT_CURSOR"].Value will store your output

更新

MSDN:將參數與 OleDbCommand 或 OdbcCommand 一起使用

NetworkProviderParam0 = NetworkProviderCmd.Parameters.Add("@pRESULT_CURSOR", OracleType.Cursor);
NetworkProviderParam0.Direction = ParameterDirection.InputOutput;

PS:我找不到 cursor 的 OdbcType

UPD2

NetworkProviderCon = new OdbcConnection(strCon);
NetworkProviderCon.Open();

OdbcCommand NetworkProviderCmd = new OdbcCommand();
NetworkProviderCmd.CommandText = "{? = SP_NETWORK_IDL(?,?,?)}";
NetworkProviderCmd.Connection = NetworkProviderCon;
NetworkProviderCmd.CommandTimeout = this.Variables.CADATABASECORETIMEOUT;
NetworkProviderCmd.CommandType = CommandType.StoredProcedure;

//parameters to call SP 
NetworkProviderCmd.Parameters.Add("pRESULT_CURSOR", OracleType.Cursor).Direction = ParameterDirection.InputOutput; //NetworkProviderParam1
NetworkProviderCmd.Parameters.Add("pdtStartTime", OdbcType.DateTime).Value = strStartDate; //NetworkProviderParam2
NetworkProviderCmd.Parameters.Add("pdtEndTime", OdbcType.DateTime).Value = strEndDate; //NetworkProviderParam3
NetworkProviderCmd.Parameters.Add("RETURN_VALUE", OdbcType.Int).Direction = ParameterDirection.ReturnValue; //NetworkProviderParam4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM