Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 Oracle ODP. (.NET) Как в запросе можно использовать ассоциативный массив через UDT  [new]
Hazard
Member

Откуда: Frankfurt
Сообщений: 438
Доброго времени суток, коллеги.
Помогите разобраться, как можно использовать ассоциативный массив для передачи параметра в запрос. Например, в PL/SQL такое работает :

CREATE OR REPLACE
TYPE NUMBERS as table of number

declare
  ds NUMBERS := NUMBERS();
begin
  ds.extend();
  ds(ds.count) := 100;
  ds.extend();  
  ds(ds.count) := 116;
  for cur in (select * from all_objects t, table(ds) c
                WHERE t.object_id = c.column_value) loop
    dbms_output.put_line ('cur '||cur.object_id||' cur name '||cur.object_name);                
  end loop;                
end; 



Пробую выполнить в .NET select * from all_objects t, table(:ds) c
WHERE t.object_id = c.column_value

используя входной параметр

            cmd.Parameters.Add("DS", Oracle.DataAccess.Client.OracleDbType.Array, System.Data.ParameterDirection.Input);
            cmd.Parameters["DS"].UdtTypeName = "NUMBERS";

            private List <int> arrayIN = new List <int>();
            arrayIN.Add (100);
            arrayIN.Add (116);

            cmd.Parameters["DS"].Value = arrayIN;
                using (Oracle.DataAccess.Client.OracleDataAdapter da = new Oracle.DataAccess.Client.OracleDataAdapter())
                {
                    da.SelectCommand = cmd;
                    cmd.CommandText = baseQueryIN;
                    da.Fill(dt);
                }


при выполнении метода Fill (dt) возникает исключение

Ungültiges Parameter-Binding
Parameter name: DS

может, у кого есть рабочий пример с выполнением SQL и передачей ассоциативного массива?
8 окт 12, 18:11    [13286530]     Ответить | Цитировать Сообщить модератору
 Re: Oracle ODP. (.NET) Как в запросе можно использовать ассоциативный массив через UDT  [new]
Hazard
Member

Откуда: Frankfurt
Сообщений: 438
как оказалось, необходимо создавать custom class для UDT параметра.


ссылка, с примером


[url=]http://www.codeproject.com/Articles/33829/How-to-use-Oracle-11g-ODP-NET-UDT-in-an-Oracle-Sto[/url]
8 окт 12, 19:36    [13286913]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить