Я создал таблицу как тип в 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();