如果参数为空,Oracle无法使用默认值

oyt4ldly  于 2023-08-04  发布在  Oracle
关注(0)|答案(1)|浏览(199)

我有存储过程

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.DeriveParametersC#从SP Oracle获取参数
更新:我完成了,使用OracleCommand的BybindName,非常感谢大家

1u4esq0p

1u4esq0p1#

只需使用命名参数并省略p_ObjID

VARIABLE p_Result REFCURSOR;
EXEC PAR.TESTAPI(p_Contract => 'PPHP0001', p_Result =>:p_Result);

字符串

相关问题