- - PR -
ODP.NETを利用したPL/SQL配列の型
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-12-06 16:48
いつもお世話になっております。
VisualBasic2005+ODP.NET(ORACLE10g)で開発を行っているのですが PL/SQLで PLS_INTEGER型の配列を使用すると次のようなエラーが出て困っています。 「PLS-00418 配列バインドの型は、PL/SQL表の行の型と一致する必要があります。」 コードは以下の通りです。(大分省略しているので見辛いと思いますが・・・) [VB] dim Command As New OracleCommand Dim a() As Integer = {10, 11, 12} mCommand.Parameters.Add("P_ARRAY" , OracleDbType.Int32, val, ParameterDirection.Input) mCommand.Parameters.Item("P_ARRAY").CollectionType = OracleCollectionType.PLSQLAssociativeArray Command.ExecuteNonQuery() [PL/SQL] TYPE T_INT IS TABLE OF PLS_INTEGER INDEX BY BINARY_INTEGER; PROCEDURE prc_PARRAY (P_ARRAY COMMON.T_INT )IS : : : ちなみに上記のコードで VB側のa() をInteger→Decimal、PL/SQL側のT_INTを PLS_INTEGER→NUMBERに変更すると上手く行きました。 パラメータを配列にしない場合でも上手くいったので配列の場合だけ互換性がないのでしょうか? ご存知の方教えてください。よろしくお願いします。 [ メッセージ編集済み 編集者: 未記入 編集日時 2006-12-06 17:39 ] [ メッセージ編集済み 編集者: 未記入 編集日時 2006-12-06 17:39 ] | ||||
|
投稿日時: 2006-12-06 17:27
配列バインドは、OracleCommand.ArrayBindCount を指定しなければならなかったかと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-12-07 09:15
じゃんぬねっとさん、ありがとうございます。
OracleCommand.ArrayBindCount 指定して実行してみましたが エラーが出てしまいました。 Oracleに問い合わせたところ 『Oracle Data Provider for .NET開発者ガイド 10g リリース2(10.2)』 (B19259-01) の、「パラメータ・バインド」の「OracleDbTypeの列挙型」の項に、バイ ンドする際のDB側のデータ型とOracleDbTypeの組み合わせの表がございま す。 こちらの表にはPLS_INTEGERについて記述がなく、バインド変数として使 用するためのOracleDbTypeの組み合わせもございません。 そのため、PLS_INTEGERではなく、NUMBER型をご使用下さいますでしょう か。 という返答がきました。 残念ですがNUMBERで対応することにします。 ありがとうございました。 |
1