- - PR -
ODP.NETを利用したPL/SQL配列の値の取得
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-11-22 16:57
お世話になります。よろしくお願いします。
現在、VB.NET(2003)+OO4Oで作成されたアプリを VB.NET(2003)+ODP.NETに変更しようと計画しています。 元々はVB5+OO4Oで作成したアプリをPL/SQLについては変更なしで .NET化したために、多少作りに難があるのは承知していますが、よろしくご教授ください。 CREATE OR REPLACE PACKAGE myPACKAGE1 AS TYPE T_TBL01_CHAR_1 IS TABLE OF TBL01.TBL01_CHAR_1%TYPE INDEX BY BINARY_INTEGER; TYPE T_TBL01_CHAR_2 IS TABLE OF TBL01.TBL01_CHAR_2%TYPE INDEX BY BINARY_INTEGER; PROCEDURE SELS_1 ( I_TERMS_1 IN TBL01.TBL01_TERMS_1%TYPE, I_TERMS_2 IN TBL01.TBL01_TERMS_2%TYPE, O_TBL01_CHAR_1 OUT T_TBL01_CHAR_1, O_TBL01_CHAR_2 OUT T_TBL01_CHAR_2, O_RTNINF OUT VARCHAR2, O_RTN_CD OUT NUMBER, O_DBID OUT VARCHAR2, O_RTNKEY OUT VARCHAR2 ); END myPACKAGE1; / 上記の様なパッケージに対してVB側で以下の様なコーディングを行いました。 Private Sub WORK_SET_SAMPLE() Dim OraConnection As Oracle.DataAccess.Client.OracleConnection Dim OraSQL1 As Oracle.DataAccess.Client.OracleCommand Dim I_TERMS_1 As New OracleParameter Dim I_TERMS_2 As New OracleParameter Dim O_TBL01_CHAR_1 As New OracleParameter Dim O_TBL01_CHAR_2 As New OracleParameter Dim O_RTNINF As New OracleParameter Dim O_RTN_CD As New OracleParameter Dim O_DBID As New OracleParameter Dim O_RTNKEY As New OracleParameter OraConnection = New Oracle.DataAccess.Client.OracleConnection OraConnection.ConnectionString = "User Id=user1;Password=pass1 Source=oracle" OraConnection.Open() With I_TERMS_1 .OracleDbType = OracleDbType.Char .CollectionType = OracleCollectionType.PLSQLAssociativeArray .Direction = ParameterDirection.Input .Size = 1 .Value = strINPUT_VALUE_1 End With With I_TERMS_2 .OracleDbType = OracleDbType.Char .CollectionType = OracleCollectionType.PLSQLAssociativeArray .Direction = ParameterDirection.Input .Size = 1 .Value = strINPUT_VALUE_2 End With With O_TBL01_CHAR_1 .OracleDbType = OracleDbType.Char .CollectionType = OracleCollectionType.PLSQLAssociativeArray .Direction = ParameterDirection.Output .Size = 150 End With With O_TBL01_CHAR_2 .OracleDbType = OracleDbType.Char .CollectionType = OracleCollectionType.PLSQLAssociativeArray .Direction = ParameterDirection.Output .Size = 150 End With With O_RTNINF .OracleDbType = OracleDbType.Varchar2 .CollectionType = OracleCollectionType.PLSQLAssociativeArray .Direction = ParameterDirection.Output .Size = 1 End With With O_RTN_CD .OracleDbType = OracleDbType.Decimal .CollectionType = OracleCollectionType.PLSQLAssociativeArray .Direction = ParameterDirection.Output .Size = 1 .Value = 98 End With With O_DBID .OracleDbType = OracleDbType.Varchar2 .CollectionType = OracleCollectionType.PLSQLAssociativeArray .Direction = ParameterDirection.Output .Size = 1 End With With O_RTNKEY .OracleDbType = OracleDbType.Varchar2 .CollectionType = OracleCollectionType.PLSQLAssociativeArray .Direction = ParameterDirection.Output .Size = 1 End With OraSQL1 = New Oracle.DataAccess.Client.OracleCommand("myPACKAGE1.SELS_1", OraConnection) OraSQL1.CommandType = CommandType.StoredProcedure OraSQL1.Parameters.Add(I_TERMS_1) OraSQL1.Parameters.Add(I_TERMS_2) OraSQL1.Parameters.Add(O_TBL01_CHAR_1) OraSQL1.Parameters.Add(O_TBL01_CHAR_2) OraSQL1.Parameters.Add(O_RTNINF) OraSQL1.Parameters.Add(O_RTN_CD) OraSQL1.Parameters.Add(O_DBID) OraSQL1.Parameters.Add(O_RTNKEY) OraSQL1.ExecuteNonQuery() : : OraConnection.Close OraConnection.Dispose End sub oracleparameterオブジェクトをPL/SQL配列としてバインドしていますが、 実行結果として、どのようにしてoracleparameterオブジェクトから値を取得できる のか、いろいろと探してみましたが情報を見つけることができませんでした。 まだ、検証段階なのでコーディング自体はいい加減ですが、 この部分についてはどなたかにご教授頂ければ幸いです。 |
|
投稿日時: 2006-11-23 01:59
PL/SQL連想配列 を OUT で受けたことはないけれど、
一応マニュアルには記載がありますね。 http://otndnld.oracle.co.jp/document/products/oracle10g/102/windows/B31247-01/featOraCommand.htm#BABBDHBB _________________ かるあ のメモ と スニペット |
|
投稿日時: 2006-11-24 10:15
>>かるあさん
ありがとうございます。 さっそく試してみます。 確か、最初にそこは見ていたような....。(笑) 本業のjavaのプロジェクトと平行作業だったので、 勝手に関係なしと脳内変換していたのかな? いずれにしても、ご教授感謝いたします。 |
1