初始化 EF core 中的 oracle 记录表

问题描述 投票:0回答:1

如标题所说。 这是程序包中的类型:


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 上的文档非常少。 谢谢,

c# oracle entity-framework odb
1个回答
0
投票
TYPE curTijd         IS TABLE OF recTijd   INDEX BY BINARY_INTEGER;

这是一种集合类型,只能在 PL/SQL 中使用。您不能在任何客户端程序中将其绑定到原始文件。您需要研究您的 Oracle 客户端驱动程序是否支持集合,并相应地编写代码。在某些环境中,您可以将数组检索到变量而不是记录数组 - 如果您的情况如此,您始终可以分解 recTijd 类型的 4 列并将四个单独的数组传回客户端中的变量。

© www.soinside.com 2019 - 2024. All rights reserved.