使用EF调用Oracle存储过程失败

我有一个oracle存储过程,它使用输入参数中的2个字符串和一个日期,并将参考光标作为输出:

CREATE OR REPLACE PROCEDURE SCHEMA.MYPROSTO (
   pPl    IN     VARCHAR2, -- Comma (;) separated
   pTy    IN     VARCHAR2,-- Comma (;) separated
   pDate     IN     mytable.mydate%TYPE,
   pCursor      OUT sys_refcursor)
IS
   .....
   sSQL      VARCHAR2 (3000);
BEGIN

   -- making SQL Order
   sSQL := 'SELECT TO_CHAR (v.date_c........

   ......


   OPEN pCursor FOR sSQL;

END MYPROSTO;

输出游标返回一组3个字符串单元行。

我将这个存储过程导入到我的实体框架模型中,并将其存储在.config文件中:

<oracle.manageddataaccess.client>
<version number="*">
  <implicitRefCursor>
    <storedProcedure schema="SCHEMA" name="MYPROSTO">
      <refCursor name="PCURSOR">
        <bindInfo mode="Output"/>
        <metadata columnOrdinal="0" columnName="YEAR" providerType="Varchar2" allowDBNull="true" nativeDataType="Varchar2"/>
        <metadata columnOrdinal="1" columnName="MONTH" providerType="Varchar2" allowDBNull="true" nativeDataType="Varchar2"/>
        <metadata columnOrdinal="2" columnName="COUNT" providerType="Varchar2" allowDBNull="true" nativeDataType="Varchar2"/>
      </refCursor>
    </storedProcedure>
  </implicitRefCursor>
</version>
</oracle.manageddataaccess.client>

函数import wizzard创建了一个结果对象并生成一个访问函数:

public virtual ObjectResult<MYPROSTO_Result> MYPROSTO (string pPL, string pTY, Nullable<System.DateTime> pDATE)
{
    var pPLParameter = pPL!= null ?
        new ObjectParameter("PPL", pPL) :
        new ObjectParameter("PPL", typeof(string));

    var pTYParameter = pTY!= null ?
        new ObjectParameter("PTY", pTY) :
        new ObjectParameter("PTY", typeof(string));

    var pDATEParameter = pDATE.HasValue ?
        new ObjectParameter("PDATE", pDATE) :
        new ObjectParameter("PDATE", typeof(System.DateTime));

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<MYPROSTO_Result>("MYPROSTO", pPLParameter, pTYParameter, pDATEParameter);
}

但是,对此函数的调用会在最后一行引发异常( System.Data.Entity.Core.EntityCommandExecutionException ):

ORA-06550: Ligne 1, colonne 8 : PLS-00306: wrong number or types of arguments in call to 'MYPROSTO'
ORA-06550: Ligne 1, colonne 8 : PL/SQL: Statement ignored

我不明白它为什么会失败


似乎有几个问题:

  • 将一个varchar(2)发送到日期字段中
  • 参数“pTY”与“pType”的名称
  • 参数“pPL”与“pPlant”的名称
  • 参数“PPLT”与“PPL”的名称

  • 什么是返回参数。 这是“映射”好吗? 再检查一遍


    错误信息中的答案肯定是明确的:

    “调用'MYPROSTO'时错误的参数数量或类型”

    你的过程需要4个参数,但你只能传递3个。你需要一个输出变量用于refcursor。

    链接地址: http://www.djcxy.com/p/27297.html

    上一篇: Call oracle Stored Procedure with EF fail

    下一篇: How should I call my C++ function from Unity3D