- PR -

ODP.NETを利用したPL/SQL配列の値の取得

1
投稿者投稿内容
増員希望
会議室デビュー日: 2006/11/22
投稿数: 2
投稿日時: 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オブジェクトから値を取得できる
のか、いろいろと探してみましたが情報を見つけることができませんでした。
まだ、検証段階なのでコーディング自体はいい加減ですが、
この部分についてはどなたかにご教授頂ければ幸いです。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 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/22
投稿数: 2
投稿日時: 2006-11-24 10:15
>>かるあさん
ありがとうございます。
さっそく試してみます。
確か、最初にそこは見ていたような....。(笑)
本業のjavaのプロジェクトと平行作業だったので、
勝手に関係なしと脳内変換していたのかな?
いずれにしても、ご教授感謝いたします。
1

スキルアップ/キャリアアップ(JOB@IT)