nhibernate - 在 SQL Server 2008 中,我可以将表值参数从 NHibernate 传递给我的存储过程。如何在 Oracle 中实现相同的目标

标签 nhibernate sql-server-2008 stored-procedures oracle11g

我在 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();

最佳答案

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;

关于nhibernate - 在 SQL Server 2008 中,我可以将表值参数从 NHibernate 传递给我的存储过程。如何在 Oracle 中实现相同的目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5868234/

相关文章:

Linq for NHibernate 和预加载的 fetch 模式

c# - NHibernate 异常枚举器已修改

sql-server - 使用类似sql server中的方式查询二进制列

sql - Firebird 存储过程中的动态 SQL(where)

mysql - 如果存在,则更新,否则插入,存储过程中的游标仅返回 1 行

sql - [表] 中只有 1 行时使用 ' where id IN [table] ' 会影响性能吗?

sql-server - 如何在 NHibernate 中使用 READPAST 提示?

c# - NHibernate 和 INotifyPropertyChanged

performance - SQL Server 2008 空间查询。如果它们彼此相交,如何对多边形进行分组?

sql - 如何选择所有具有以特定数字开头的 bigint 字段的记录?