2011-07-18 7 views
1

私が抱えている問題はSSISとは関係ないかもしれませんが、私は徹底したかったのです。 SQL Server、Sybase、およびOracleにアクセスするのと本質的に同じコード(ODBCを使用)を使用しようとしています。 Oracle以外のものはすべて動作しています(驚くべきことではありません)が、この問題を解決する方法については迷っています。SSIS 2008のスクリプトタスクでOracle ODBCドライバを使用すると問題が発生する

Oracleドライバは11.01.00.06バージョンです。インスタンスに正常に接続することはできますが、関数への呼び出しは失敗します。私は、カーソルがこのケースではパラメータであるという事実(SQL ServerとSybaseでは真実ではないという事実)とエラーが関係していると推測しています。カーソルのOdbcTypeはありません。

ご意見やご提案があれば幸いです。

私は取得しています誤りがある - ERROR [07001] [オラクル] [ODBC] [オラ] ORA-01008:すべての変数は、コード(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 
+0

を持っていますかパラメータ? –

+0

私はpRESULT_CURSORを追加していくつかの進歩を遂げることができましたが、私は今関数のRETURN番号のパラメータを定義する方法に固執しています。 –

答えて

0

あなたの関数は、3つのパラメータを要求していますが、唯一の2

NetworkProviderCmd.Parameters.Add 
    ("@pRESULT_CURSOR", OracleType.Cursor).Direction = ParameterDirection.InputOutput; 
//NetworkProviderCmd.Parameters["pRESULT_CURSOR"].Value will store your output 
を渡しています

UPD

MSDN: Using Parameters with an OleDbCommand or OdbcCommand

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

PS:私はUPD2カーソル

のためのOdbcTypeを見つけることができません:あなたはとしてpRESULT_CURSORを持っている

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 
+0

正解だけを入力すると、私は答えを削除します。ありがとう。 – ksogor

+0

私はこの面で進歩を遂げましたが、私が今取り組んでいる問題は、関数からRETURN値を正しく表現する方法を判断できないということです。プロシージャで関数をラップすると、コードを正常に実行することができました(これは長期的な解決策ではありません)が、関数を呼び出すときに元のエラーが発生します。誰でもODBCParmとしてリターンをラップする方法を知っていますか?私は試した 。 。 。 Param3 = NetworkProviderCmd.Parameters.Add(新しいOdbcParameter( "@ RETURN_VALUE"、OdbcType.Int)); Param3.Direction = ParameterDirection.ReturnValue; –

+0

'NetworkProviderCmd.CommandText'を変更しましたか? – ksogor

関連する問題