在SSIS 2008的脚本任务中使用Oracle ODBC驱动程序

本文关键字:Oracle ODBC 驱动程序 任务 SSIS 2008 脚本 | 更新日期: 2023-09-27 18:02:52

我遇到的问题可能与SSIS没有任何关系,但我想彻底。我试图有本质上相同的代码(使用ODBC)访问SQL Server, Sybase和Oracle。除了Oracle之外的所有东西都在工作(不足为奇),但我对如何解决这个问题感到茫然。

Oracle驱动程序是11.01.00.06版本。我能够成功地连接到实例,但调用(函数)失败。我猜这个错误与光标在这种情况下是一个参数这一事实有关(对于SQL Server和Sybase来说不是真的),我没有考虑到这一点。但是游标没有OdbcType。

任何帮助或建议都将不胜感激。

我得到的错误是- error [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

在SSIS 2008的脚本任务中使用Oracle ODBC驱动程序

你的函数需要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;

注::我找不到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