Я хотел вызвать oracle хранимую процедуру, имеющую коллекцию в качестве параметра от C#. Мне удалось сделать вызов процедуры через массив / список (только одномерный) из c#, но теперь я хочу передать список сложного типа, как только я добавил, что получаю OracleParameter.Value - недопустимая ошибка. Ниже приведен пример:
OracleCommand comm = new OracleCommand("Schema.PACK_INQUIRY.ProcEmpUDFArray_Test", "Connection");
comm.CommandType = CommandType.StoredProcedure;
List<Employee> EmpList = new List<Employee>()
{
new Employee() { City = "City1", Name="Emp1" },
new Employee() {City = "City2", Name="Emp2" }
};
OracleParameter param1 = new OracleParameter("Param1", OracleDbType.Varchar2, EmpList.Count, EmpList, ParameterDirection.Input);
param1.ArrayBindStatus = Enumerable.Repeat(OracleParameterStatus.Success, EmpList.Count()).ToArray();
param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
comm.Parameters.Add(param1);
comm.ExecuteNonQuery();
Ниже приведен код класса
public class Employee
{
public string Name { get; set; }
public string City { get; set; }
}
Ниже приведен oracle код
create or replace type EMPTEST AS OBJECT
(
Name varchar2(50),
City varchar2(50)
);
type T_EMPUDF_ARRAY is table of EMPTEST;
PROCEDURE ProcEmpUDFArray_Test( Param1 IN T_EMPUDF_ARRAY)
AS
out_ORAERRORMSG VARCHAR2(100);
BEGIN
insert into test values ('1');
commit;
if Param1.count > 0 THEN
FOR i IN 1 .. Param1.count LOOP
insert into test values (Param1(i).Name);
END LOOP;
END IF;
commit;
EXCEPTION
WHEN OTHERS THEN
out_ORAERRORMSG := SUBSTR(SQLERRM, 1, 50);
insert into test values (out_ORAERRORMSG);
commit;
END ProcEmpUDFArray_Test;
Я добавил код вставки в тестовые значения («1»); просто чтобы проверить, входит ли мой звонок в про c или нет. Я проверил это не так. Не могу я передать сложный тип списка процедуре oracle. Также я читаю Oracle
Ассоциативные массивы - это одномерные, неограниченные, разреженные наборы однородных элементов. Во-первых, ассоциативный массив является одномерным. Это означает, что ассоциативный массив имеет один столбец данных в каждой строке, который аналогичен одномерному массиву.