2017-11-29 1 views
1

C#の出力パラメータとしてvarchar2(4000)のOracle表を取得する際に助けが必要です。C#のストアド・プロシージャ出力からTABLE OF VARCHAR2(4000)を取得しています

私はこれは、ストアド・プロシージャています

Type TTABSelectResult IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER;  
PROCEDURE FOO_Procedure(i_nIndex   IN NUMBER, 
         i_nAnzahl   IN NUMBER, 
         o_tabSelectResult OUT TTABSelectResult); 

そして、これは私が試したコードのようになります。

using (var cmd = new OracleCommand 
       { 
        Connection = Conn, 
        CommandType = CommandType.StoredProcedure, 
        CommandText = "FOO_Package.FOO_Procedure", 
        BindByName = true 
       }) 
{ 
    cmd.Parameters.Add(new OracleParameter("i_Index", index)); 
    cmd.Parameters.Add(new OracleParameter("i_Cnt", maxCnt)); 
    cmd.Parameters.Add("o_tabSelectResult", ???).Direction = ParameterDirection.Output; 

    cmd.ExecuteNonQuery(); 

    var obj = (???)cmd.Parameters["o_tabSelectResult"].Value; 
} 

あなたは親切に私が使用する必要がどの種類を教えてもらえますか? OracleDbTypestring[]のようなものをサポートしていないためです。

PS:詳細については編集しました。

PPS: o_tabSelectResultテーブルからデータを取得する可能性を探します。

+1

戻り値が必要な場合は、executenonqueryが間違った答えになります。削除/挿入/更新の詳細はこちらをご覧ください。 – BugFinder

+1

可能な[dupe](https://stackoverflow.com/q/1728525/15498)? –

+0

あなたの入力に感謝し、私はより多くの情報を追加しましたが、現時点でこれを解決できませんでした。 – Malloc

答えて

0

私はC#でリストを移入するために使用することができREFカーソルに出力を変更しました。

魅力的な作品です。

ありがとうございました!

1

このようにしてみてください。

using (var cmd = new OracleCommand 
       { 
        Connection = Conn, 
        CommandType = CommandType.StoredProcedure, 
        CommandText = "SELECT YOUR_FIELD FROM YOUR TABLE WHERE YOUR FILTER_COLUMN = @PARAM1", 
        BindByName = true 
       }) 
    { 
     cmd.Parameters.AddWithValue("@PARAM1", your_filter_param); 
     var result = cmd.ExecuteScalar().ToString(); 
    } 
+0

OPはストアドプロシージャを呼び出していることに注意してください。それで、彼らはMCVEに 'Direction = ParameterDirection.Output'を持っていたのです。 –

+0

あなたは正しいですが、私はストアドプロシージャに何が含まれているかわからないので、私は代わりのソリューションを提案したいと思います。 –

関連する問題