如标题所说。 这是程序包中的类型:
create or replace PACKAGE Pkg_Punt_Tijd
AS
TYPE recTijd IS RECORD (
TijdVan DATE,
TijdTot DATE,
Prioriteit NUMBER(1) ,
Percentage NUMBER);
TYPE curTijd IS TABLE OF recTijd INDEX BY BINARY_INTEGER;
PROCEDURE sp_get_punt_tijd
(
i_PuntTijdVan IN DATE,
i_PuntTijdTot IN DATE,
i_ProjectNr IN VARCHAR2,
i_DagType IN VARCHAR2,
o_tijd OUT curTijd,
o_recnum OUT NUMBER
);
在 C# 中我这样做:
var p0 = new OracleParameter("i_PuntTijdVan", OracleDbType.Date, startDateTime, ParameterDirection.Input);
var p1 = new OracleParameter("pd_TijdTot", OracleDbType.Date, endDateTime, ParameterDirection.Input);
var p2 = new OracleParameter("i_ProjectNr", OracleDbType.Varchar2, projectNumber, ParameterDirection.Input);
var p3 = new OracleParameter("ls_DagType", OracleDbType.Varchar2, dayType, ParameterDirection.Input);
var output = new OracleParameter("o_tijd", OracleDbType.Raw, "null", ParameterDirection.Output);
var output2 = new OracleParameter("o_recnum", OracleDbType.Decimal, "null", ParameterDirection.Output);
string command = "Pkg_Punt_Tijd.SP_GET_PUNT_TIJD(:In_Type_Of_Price, :In_Artikelnr, :In_Currency, :In_VendorNr, :In_DolmenNr, :In_QuoteId, :In_Bundle_Type, :In_ParentItemId, :In_QtyOrdered,:v_calculated_prices); END;";
await _context.Database.ExecuteSqlRawAsync(command, p0, p1, p2, p3, output, output2);
string? result = output.Value.ToString();
string? result2 = output2.Value.ToString();
如您所见,我将 o_tijd 参数设置为原始类型,但我不知道如何初始化它并取回它,通常它应该给我一个记录数组,那么最好的办法是什么?为 o_tijd 上课,ef 会解决这个问题吗?或者我把它作为字符串获取并解析它?我应该将参数保留为原始参数还是其他参数,oracle ef core 上的文档非常少。 谢谢,
TYPE curTijd IS TABLE OF recTijd INDEX BY BINARY_INTEGER;
这是一种集合类型,只能在 PL/SQL 中使用。您不能在任何客户端程序中将其绑定到原始文件。您需要研究您的 Oracle 客户端驱动程序是否支持集合,并相应地编写代码。在某些环境中,您可以将数组检索到变量而不是记录数组 - 如果您的情况如此,您始终可以分解 recTijd 类型的 4 列并将四个单独的数组传回客户端中的变量。