私は、タイプを返すOracleパッケージ内の関数を試して呼び出すためにC#を使用しています。C#からタイプを返すOracle関数を呼び出す
は、私がこれまでのところ、私は全体来てアドバイスがあり、これを研究日の最後のカップルを費やしてきた:
- はodp.net 11gのデータアクセスドライバを使用します。
- パラメータ出力方向をパラメータ出力を確保
- を戻り値に設定されていることを確認最初のパラメータは
- は、出力パラメータをOracle型 名でudttypenameを付け加えます。以下は
(いくつかの似たようなケースはこれで解決された彼女に尋ねた)このudttypenameが大文字であることを確認する
Type P_Details Is Record(
var1 a.a_Type_Key%Type
,var2 Varchar2(1)
,var3 a.b%Type
,var4 c.Type_Key%Type
,var5 d.Code%Type
,var6 d.Product_Path%Type
,var7 a.Channel_Key%Type
,var8 a.From_Date%Type
,var9 a.To_Date%Type);
Type P_List Is Table Details;
Function Get(p_1 In Number,
p_2 In Varchar2,
p_3 In Varchar2,
p_4 In Date,
p_5 In Out Varchar2) Return List;
Oracleパッケージを呼び出すために使用されるC#コードです。
using (var connection = new OracleConnection(ConnectionString))
{
using (var command = new OracleCommand
{
CommandType = CommandType.StoredProcedure,
CommandText = "PACKAGENAME.FUNCTIONNAME",
Connection = connection,
BindByName = true
})
{
var output = new OracleParameter
{
UdtTypeName = "PREFS.PREFERENCE_LIST",
ParameterName = "p_details",
OracleDbType = OracleDbType.Object,
Direction = ParameterDirection.ReturnValue
};
command.Parameters.Add(output);
command.Parameters.Add(new OracleParameter
{
ParameterName = "p_1",
OracleDbType = OracleDbType.Decimal,
Direction = ParameterDirection.Input,
Value = details.RuleId
});
command.Parameters.Add(new OracleParameter
{
ParameterName = "p_2",
OracleDbType = OracleDbType.Decimal,
Direction = ParameterDirection.Input,
Value = details.CustomerDetails.CtiId
});
command.Parameters.Add(new OracleParameter
{
ParameterName = "p_3",
OracleDbType = OracleDbType.Varchar2,
Direction = ParameterDirection.Input,
Value = details.CustomerDetails.Surname
});
command.Parameters.Add(new OracleParameter
{
ParameterName = "p_4",
OracleDbType = OracleDbType.Varchar2,
Direction = ParameterDirection.Input,
Value = details.CustomerDetails.Postcode
});
command.Parameters.Add(new OracleParameter
{
ParameterName = "p_5",
OracleDbType = OracleDbType.Date,
Direction = ParameterDirection.Input,
Value = details.CustomerDetails.DateOfBirth
});
command.Parameters.Add(new OracleParameter
{
ParameterName = "p_6",
OracleDbType = OracleDbType.Varchar2,
Direction = ParameterDirection.InputOutput
});
connection.Open();
command.ExecuteNonQuery();
}
}
私は今、エラーを取得しています
"OCI-22303:タイプ "PACKAGENAME.TYPENAMEが、私は次の形式を試してみたUDTTYPENAMEについては
" が見つかりません"
- TYPENAME
- FUNCTIONNAME.TYPENA ME
- PACKAGENAME.TYPENAME
- PACKAGENAME.TYPENAME
- PACKAGENAME.FUNCTIONNAME.TYPENAME
- 私は今てきたように、私はこのために任意のヘルプや応答をいただければと思います
SCHEMA.PACKAGENAME.TYPENAMEアイデアがなくなります
残念ながら、Oracle側は私が何も制御できないブラックボックスのほうが多いです。私はOracleパッケージの所有者に上記を提案することができますが、最初にすべてのルートを探索したいと考えました。 – AndyS