gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:03:47 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com