我有一个带签名的存储过程
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
答案 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,但更难以处理),你必须获取和解释它。
祝你好运。