Я создал таблицу как тип в SQL Server 2008.
Так как SQL Server 2008 поддерживает параметр передачи таблицы значений как параметр IN для хранимой процедуры. Он работает нормально.
Теперь я должен выполнить тот же подход в Oracle.
Я сделал это через PLSQLAssociativeArray
, но ограничение ассоциативного массива - они однородны (каждый элемент должен быть одного типа).
Где, как и в случае с табличным параметром SQL Server 2008, возможно.
Как добиться того же результата в Oracle.
Ниже приведены мой тип и хранимая процедура в SQL Server 2008:
CREATE TYPE [dbo].[EmployeeType] AS TABLE(
[EmployeeID] [int] NULL,
[EmployeeName] [nvarchar](50) NULL
)
GO
CREATE PROCEDURE [dbo].[TestCustom] @location EmployeeType READONLY
AS
insert into Employee (EMP_ID,EMP_NAME)
SELECT EmployeeID,EmployeeName
FROM @location;
GO
Вызов из NHibernate
var dt = new DataTable();
dt.Columns.Add("EmployeeID", typeof(int));
dt.Columns.Add("EmployeeName", typeof(string));
dt.Rows.Add(new object[] { 255066, "Nachi11" });
dt.Rows.Add(new object[] { 255067, "Nachi12" });
ISQLQuery final = eventhistorysession.CreateSQLQuery("Call TestCustom @pLocation = :id");
IQuery result = final.SetStructured("id", dt);
IList finalResult = result.List();