在SQL Server 2008中,我能够将表值参数从NHibernate.How传递给我的存储过程,以便在Oracle中实现相同的功能.

anu*_*pam 6 nhibernate stored-procedures oracle11g sql-server-2008

我在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
Run Code Online (Sandbox Code Playgroud)

来自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();
Run Code Online (Sandbox Code Playgroud)

Qua*_*noi 3

CREATE OR REPLACE TYPE employeeType AS OBJECT (employeeId INT, employeeName VARCHAR2(50));

CREATE TYPE ttEmployeeType AS TABLE OF employeeType;

CREATE PROCEDURE testCustom (pLocation ttEmployeeType)
AS
BEGIN
        INSERT
        INTO    employee (emp_id, emp_name)
        SELECT  *
        FROM    TABLE(pLocation);
END;
Run Code Online (Sandbox Code Playgroud)