2014-07-24 32 views
0

我有签名调用存储具有默认值参数PROC

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

你试过类似'store_cust_response(p_id => 324)'吗?如果您像这样调用过程,则p_camp_id和p_offer_id将具有其默认值。你也可以像'store_cust_response(p_id => 324,p_offer_id => 432)'和参数'p_camp_id'调用它的默认值。 – zaratustra

+0

@zaratustra:我需要从VBScript调用存储过程,请参阅我的编辑原始帖子。 – Robotron

+0

你能告诉我们你如何调用你的存储过程吗?在你已经显示的代码上面必须有一行。 – zaratustra

回答

1

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_VALUE是一个LONG(类似于BLOB,但更令人心烦的处理),你” d必须提取和解释。

好运。