Можно ли вызвать хранимую процедуру с вложенным объектом в качестве параметра?C# Call Oracle Сохраненная процедура с вложенным UDT
Например, у меня есть класс Person, у которого есть экземпляр адреса.
Person p1 = new Person();
p1.Name = "John";
p1.Address = new Adress{Street = “StackOverflow”, App = 3}
p1.Age = 20;
В базе данных я создал определенные пользователем типы и хранимой процедуры, которая принимает в качестве параметра person_type, который содержит address_type.
create or replace
TYPE Person_TYPE AS OBJECT (
Name VARCHAR2(100),
Age NUMBER,
OBJ_Address Adress_TYPE
);
В СП у меня есть:
function FC_Insert_Person (DATAINS Person_TYPE)
BEGIN
INSERT INTO Person (Name, Age) VALUES (DATAINS.Name, DATAINS.Age)
--insert into the nested object
FC_INSERT_Addrres (DATAINS.OBJ_Address);
/* in the adress sp I get the id of the person using an SEQ_PERSON_ID.CURRVAL; */
return ...
end FC_Insert_Person;
Все примеры кода, которые я нахожу только для простых объектов, или набор таблиц, так это заставляет меня спросить себя, если это будет возможно.
OracleParameter[] param = new OracleParameter[1];
param[0] = new OracleParameter(my_type, OracleDbType.Object, ParameterDirection.Input);
param[0].UdtTypeName = "Person_TYPE";
param[0].Value = p1;
dObj.ExecuteCommand("FC_Insert_Person", param);
Да. Используйте мастер настраиваемых классов, который является частью инструментов разработчика Oracle для Visual Studio. Пример Walkthough приведен здесь: http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/appdev/dotnet/userdefinedtypes/index.html –
Обратите внимание, что не рекомендуется полагаться на UDT, если производительность важна (например, много данных передается). В этом случае вы должны сгладить объекты и использовать ассоциативные массивы ... или использовать временные таблицы. –
Я согласен с вами, после нескольких дней поиска я обнаружил страницу оракула с помощью VS2013, которая автоматически генерирует классы UDT, но поскольку я использую VS2012 :(Я отказался. Но узнал, как вы упомянули, что это не будет самый эффективный способ делать вставки для больших объектов. Поэтому я буду указывать на основы: одну процедуру вставки одного типа. – GeorgesC