В базе данных oracle, как я могу указать значение по умолчанию для параметра определенного пользователем типа? - PullRequest
4 голосов
/ 16 июля 2011
    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, так как он не работает. Моя цель - не передавать эти два параметра (или передавать значение NULL) из C #, когда они недоступны. Если есть способ odp.net сделать то же самое, это тоже сработает.
Использование oracle db 11g.

Ответы [ 2 ]

9 голосов
/ 16 июля 2011

Вам необходимо привести 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. Если значения не передаются, они по умолчанию равны NULL-значениям типа STR_ASSOC_ARRAY.

И, конечно, вам нужно обновить объявление процедуры в теле пакета, чтобы соответствовать этим изменениям.

0 голосов
/ 16 июля 2011

Если вы хотите передать значение по умолчанию со стороны 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);
...