4
PACKAGE PKG_DEVICE AS 
    TYPE STR_ASSOC_ARR is table of VARCHAR(255) index by BINARY_INTEGER; 
    procedure proc_create_device 
(
    in_deviceid in raw 
, in_devicecert in clob 
, in_status in number 
, in_caps in STR_ASSOC_ARR 
, in_vals in STR_ASSOC_ARR 
); 

是存儲過程聲明。我想爲in_caps和in_vals參數指定一個默認值。可能嗎?我無法指定default null,因爲它不起作用。我的目標是在C#不可用時不必傳遞這兩個參數(或傳遞null)。如果有odp.net的方式來完成相同的,那也可以。
使用oracle db 11g。在oracle數據庫中,如何爲用戶定義類型的參數指定默認值?

+0

的默認值,你可以做到這一點:你是說你不想通過從C#邊空,你想指定默認值僅在程序中 –

回答

9

您需要將NULL轉換爲用戶定義的類型。試試這個:

PACKAGE PKG_DEVICE AS 
    TYPE STR_ASSOC_ARR is table of VARCHAR(255) index by BINARY_INTEGER; 
    procedure proc_create_device 
(
    in_deviceid in raw 
, in_devicecert in clob 
, in_status in number 
, in_caps in STR_ASSOC_ARR DEFAULT CAST(NULL AS STR_ASSOC_ARR) 
, in_vals in STR_ASSOC_ARR DEFAULT CAST(NULL AS STR_ASSOC_ARR) 
); 

現在你不應該指定in_caps或in_vals的值。如果值未傳遞,則它們默認爲STR_ASSOC_ARRAY類型的NULL值。

當然,您需要更新包體中的過程聲明以符合這些更改。

-1

如果你想通過從C#端使用

var sParam1 = new OracleParameter("in_param1_array", 
            OracleDbType.Varchar2, ParameterDirection.Input); 
sParam1.CollectionType = OracleCollectionType.PLSQLAssociativeArray; 

if (list.Count == 0) 
{ 
    sParam1.Size = 1; 
    sParam1.Value = new string[1] { "" };//Or initialize as default value. 
} 
else 
{ 
    sParam1.Size = list.Count; 
    sParam1.Value = list.ToArray(); 
} 
parameters.Add(sParam1); 
+0

爲什麼否定點..請添加評論。它與所提問題有關。 –

相關問題