1
C#コードがOracle関数を呼び出しているときに、 "無効なデータ操作"エラーが発生します。これは、データが見つからない場合にのみ発生します。データが見つかって関数が値を返すと、すべて正常に機能します。私はちょっと混乱しています。少なくとも私の理解では、データが見つからなければ関数は100を返します(関数の例外を参照)。C#でOracle関数を呼び出すとき - エラー: "無効なデータ操作"
Oracleの機能:
create or replace FUNCTION F_SCO_DPD
(
p_tip IN NUMBER,
p_dav IN VARCHAR2
)
RETURN NUMBER
IS
sco NUMBER;
BEGIN
SELECT max(score) keep(dense_rank first order by vrednost)
INTO sco
FROM sco_sif_score
WHERE sif_kat = 11
AND tip_pod = p_tip
AND vrednost >= (SELECT a.dpd
FROM sco_dpd a
WHERE a.par_davcna = p_dav);
RETURN sco;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RETURN 100;
END F_SCO_DPD;
C#コード:
using (OracleCommand cmd = new OracleCommand())
{
cmd.Connection = conn;
cmd.CommandText = "F_SCO_DPD";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new OracleParameter("p_tip", Podjetje.TipSub));
cmd.Parameters.Add(new OracleParameter("p_dav", Podjetje.Davcna));
cmd.Parameters.Add(new OracleParameter("sco", OracleDbType.Decimal, ParameterDirection.ReturnValue));
cmd.BindByName = true;
cmd.ExecuteScalar();
Score.ScoDpd = (int)(OracleDecimal)cmd.Parameters["sco"].Value;
}
おかげで、ゴードン。あなたの迅速な返信と非常に明確な説明のために。もちろん、今は期待どおりに動作しています。新しいことを学んだので、それに感謝します。あなたの答えを投票しましたが、私の評判が<15であるため、見えません。 – Flin