Моя цель - найти лучший способ передать сложный объект из .net в хранимую процедуру Oracle в качестве входного параметра.
Например :
В базе данных
Предположим, у нас есть два мастер таблицы и детали
лайк
Мастер стол:
Customers
(Id Number, Name VARCHAR2(256 BYTE), Age Number)
Подробная таблица:
заказы
(Идентификационный номер, Номер идентификатора клиента, Сумма номера)
UDT клиентов:
CREATE OR REPLACE TYPE
CUSTOMER_TYPE
AS OBJECT
(Name VARCHAR2(256 BYTE), Age NUMBER(38, 0)) NOT FINAL;
Заказы UDT:
CREATE OR REPLACE TYPE
Orders_TYPE
AS OBJECT
(CustomerId NUMBER(38, 0), Amount NUMBER(38, 0)) NOT FINAL;
Деталь UDT:
CREATE OR REPLACE TYPE
ORDERS_COLLECTION_TYPE
AS TABLE
OF Orders_TYPE
Порядок вставки:
CREATE OR REPLACE PROCEDURE INSERT(PARAM IN OUT ORDERS_COLLECTION_TYPE)
IS
BEGIN
Insert ORDERS_COLLECTION_TYPE into Orders table;
END;
Версия базы данных: Oracle Database 10g Enterprise Edition, выпуск 10.2.0.4.0 - 64bi
В .Net
использование Oracle.ManagedDataAccess.Client; //OracleDbType.Array не поддерживается
версия: 4.121.2.0
используя (OracleParameter p1 = новый OracleParameter ("", OracleDbType.Array,
ParameterDirection.InputOutput))
{
p1.UdtTypeName = "ORDERS_COLLECTION_TYPE";
p1.Value = arrOrders;
cmd.Parameters.Add (р1);
cmd.ExecuteNonQuery ();
} * * Тысяча двадцать-один