0
是否可以使用嵌套對象作爲參數調用存儲過程?C#使用嵌套UDT調用Oracle存儲過程
例如我有一個人類有一個地址實例。
Person p1 = new Person();
p1.Name = "John";
p1.Address = new Adress{Street = 「StackOverflow」, App = 3}
p1.Age = 20;
在我已創建的用戶自定義類型的數據庫,和存儲的過程,它接受作爲參數包含一個address_type一個person_type。
create or replace
TYPE Person_TYPE AS OBJECT (
Name VARCHAR2(100),
Age NUMBER,
OBJ_Address Adress_TYPE
);
在SP我:
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);
是的。使用屬於Visual Studio的Oracle Developer Tools一部分的自定義類嚮導。 Walkthrough示例位於以下位置:http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/appdev/dotnet/userdefinedtypes/index.html –
請注意,如果依賴UDT,建議不要採用if性能至關重要(例如大量數據正在通過)。在這種情況下,你應該扁平化對象並使用關聯數組......或使用臨時表。 –
我同意你,經過幾天的搜索後,我發現了使用VS2013的oracle頁面,它自動生成了UDT類,但是當我使用VS2012 :(我已經放棄了。但是當你提到這不會是最有效的方法來插入大對象,所以我會打勾的基本知識:一種類型的插入過程。 – GeorgesC