0
3つの異なる配列をパラメータとして取り込むプロシージャをコールしようとしましたが、これを行うためにさまざまな方法を試しましたが、またはパラメータの型が間違っています。 あなたは私が間違っていることを正確に理解するのを手助けできますか?問題C#でのOracle Arrayパラメータのバインド
これは、これまでの私のコードです:
using (var command = new OracleCommand(sql, connection))
{
command.CommandType = CommandType.StoredProcedure;
command.BindByName = true;
command.Connection.Open();
//Bind Client Ids Array to Database Parameter
var nArrClientId = new OracleParameter("nArrClientId", OracleDbType.Int32)
{
Size = clientIds.Length,
ArrayBindSize = new int[clientIds.Length],
Direction = ParameterDirection.Input,
CollectionType = OracleCollectionType.PLSQLAssociativeArray
};
for (var index = 0; index < clientIds.Length; index++)
{
nArrClientId.ArrayBindSize[index] = 12;
}
nArrClientId.Value = clientIds;
//Bind DocNames Array to Database Parameter
var vArrDocNum = new OracleParameter("vArrDocNum", OracleDbType.Varchar2)
{
Size = docNums.Length,
ArrayBindSize = new int[docNums.Length],
Direction = ParameterDirection.Input,
CollectionType = OracleCollectionType.PLSQLAssociativeArray
};
for (var index = 0; index < docNums.Length; index++)
{
vArrDocNum.ArrayBindSize[index] = 20;
}
vArrDocNum.Value = docNums;
//Bind Status Array to Database Parameter
var vArrStatus = new OracleParameter("vArrStatus", OracleDbType.Varchar2)
{
Size = statusArr.Length,
ArrayBindSize = new int[statusArr.Length],
Direction = ParameterDirection.Input,
CollectionType = OracleCollectionType.PLSQLAssociativeArray
};
for (var index = 0; index < statusArr.Length; index++)
{
vArrStatus.ArrayBindSize[index] = 15;
}
vArrStatus.Value = statusArr;
command.Parameters.Add(nArrClientId);
command.Parameters.Add(vArrDocNum);
command.Parameters.Add(vArrStatus);
command.ExecuteNonQuery();
connection.Close();
command.Connection.Close();
}
は、これは、Oracle
TYPE tnClientId IS TABLE OF clients.id%TYPE INDEX by pls_integer; -- Number (12,0)
TYPE tvDocNumber IS TABLE OF documents.document_number%TYPE INDEX by pls_integer; --VARCHAR2 (20 BYTES)
TYPE tvStatus IS TABLE OF varchar2(15);
PROCEDURE update_status (nArrClientId IN tnClientId,
vArrDocNum IN tvDocNumber,
vArrStatus IN tvStatus);
の操作手順の定義であるすべてのヘルプは、あなたがNested table
を使用することはできません
PL/SQLテーブルは使用できません。連想配列を使用する必要があります。つまり、INDEX BY ... –
意味が分かりません。 –