2014-07-24 33 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必須提取和解釋。

好運。