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