【发布时间】:2017-11-15 16:32:23
【问题描述】:
我有存储过程
create or replace PROCEDURE TestApi (
p_Contract IN varchar2,
p_ObjID IN INT DEFAULT 0, ------ This Question
p_Result OUT SYS_REFCURSOR
--p_Message OUT varchar2
) IS
p_Message varchar2(500);
Begin
IF p_ObjID =0 THEN p_Message:= `Null`;
ELSE p_Message:=`Not Null`;
END IF;
Open p_Result For
Select ID as "SupportListID",
p_ObjID as "ObjID"
FROM SupportList
where rownum<=5 ;
End ;
运行:
VARIABLE p_Result REFCURSOR;
EXEC PAR.TESTAPI('PPHP0001',null,:p_Result);
-- If i don't set Parameter with NUll , execute will cause an error
print p_Result;
结果:
SupportListID ObjID
------------- ---------------------------------------
107*******
107*******
107*******
107*******
107*******
我的问题:我用1个参数NULL执行SP,SP可以得到DEFAULT VALUE
注意:如果我使用除 REFCURSOR 之外的任何类型数据,我可以得到 DEFAULT VALUE 。告诉我该怎么做。我使用OracleCommandBuilder.DeriveParameters C# 从SP Oracle 获取参数
更新:我完成了,使用 OracleCommand 的 BybindName,非常感谢大家
【问题讨论】:
-
为什么要使用默认参数?您提供了一个值,该值为
NULL;这意味着一个未知的值,并不意味着“没有值所以使用默认值”。 -
No No,在 C# 代码中,我只使用无默认值的 Parameter 的 Oracle 参数。如果存在,SP 将从 C# 中检索数据,如果不将其传递给 SP,SP 将使用默认值。你知道我的意思吗???
-
如果您需要 C# 代码方面的帮助,那么您需要发布您当前的代码(以及它导致问题的位置)。