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

时间:2014-07-24 13:14:26

标签: 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")
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

1 个答案:

答案 0 :(得分:1)

仅当从PL / SQL调用过程时才应用IIRC默认值。 (我的理解是,如果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_VALUE是一个LONG(类似于BLOB,但更难以处理),你必须获取和解释它。

祝你好运。