Oracle 调用具有默认值参数的存储过程

Oracle 调用具有默认值参数的存储过程,oracle,stored-procedures,vbscript,Oracle,Stored Procedures,Vbscript,我有一个带签名的存储过程 PROCEDURE store_cust_response( p_id NUMBER DEFAULT NULL, p_camp_id NUMBER DEFAULT NULL, p_offer_id NUMBER DEFAULT NULL ) 在VBSCript中创建参数时,是否必须为签名中的每个参数创建一个参数?如果是这样,那么如何调用它们的默认值 Set conncmdA = CreateObject("adodb.command") c

我有一个带签名的存储过程

PROCEDURE store_cust_response(
    p_id NUMBER DEFAULT NULL, 
    p_camp_id NUMBER DEFAULT NULL, 
    p_offer_id NUMBER DEFAULT NULL
)
在VBSCript中创建参数时,是否必须为签名中的每个参数创建一个参数?如果是这样,那么如何调用它们的默认值

Set conncmdA = CreateObject("adodb.command")
conncmdA.CommandText = "foo.store_cust_response"
conncmdA.CommandType = 4    'adCmdStoredProc
conncmdA.ActiveConnection = conntemp

conncmdA.Parameters.Append conncmdA.CreateParameter("p_id", adInteger, adParamInput, 4)
conncmdA.Parameters.Append conncmdA.CreateParameter("p_camp_id", adInteger, adParamInput, 4)
conncmdA.Parameters.Append conncmdA.CreateParameter("p_offer_id", adInteger, adParamInput, 4)

conncmdA.Parameters(0) = null
conncmdA.Parameters(1) = camp_id
conncmdA.Parameters(2) = offer_id

conncmdA.Execute
Set conncmdA = Nothing

IIRC默认值仅在从PL/SQL调用过程时应用。(我的理解是,如果PL/SQL中过程的特定调用没有提供所有参数,PL/SQL编译器将从数据字典中获取默认值)。如果以其他方式调用该过程,则必须提供所有参数。至于“调用它们的默认值”,你不能。您必须提供值,即使这些值与签名中的默认值相同。我想您可以通过查询数据字典来获得默认值,比如

SELECT a.DEFAULT_VALUE
  FROM SYS.DBA_ARGUMENTS a
  WHERE a.OBJECT_NAME = whatever AND
        a.ARGUMENT_NAME = whatever;
其中的一个问题是DBA_ARGUMENTS.DEFAULT_值是一个长值(类似于BLOB,但处理起来更烦人),您必须获取并解释它


祝您好运。

您是否尝试过类似的
存储客户响应(p\u id=>324)
?如果像这样调用过程,p_camp_id和p_offer_id将有其默认值。您还可以调用类似于
store\u cust\u response(p\u id=>324,p\u offer\u id=>432)
的参数
p\u camp\u id
将有其默认值。@Zaratutra:我需要从VBScript调用存储过程,请查看我对原始帖子的编辑。您能告诉我们如何调用存储过程吗?在你已经展示的代码上面必须再多出一行,它们都显示在原来的帖子中,其余的都是样板代码。为了完整起见,我将编辑原始帖子。只有从PL/SQL调用过程时,才会应用IIRC默认值。(我的理解是,如果PL/SQL中过程的特定调用没有提供所有参数,PL/SQL编译器将从数据字典中获取默认值)。如果以其他方式调用该过程,则必须提供所有参数。至于“调用它们的默认值”,你不能。您必须提供值,即使这些值与签名中的默认值相同。我想你也可以查询数据字典。祝你好运。