加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用EF失败调用oracle存储过程

发布时间:2020-12-15 08:01:20 所属栏目:百科 来源:网络整理
导读:我有一个oracle存储过程,它在输入参数中包含2个字符串和一个日期,并将ref光标作为输出: CREATE OR REPLACE PROCEDURE SCHEMA.MYPROSTO ( pPl IN VARCHAR2,-- Comma (;) separated pTy IN VARCHAR2,-- Comma (;) separated pDate IN mytable.mydate%TYPE,pCu
我有一个oracle存储过程,它在输入参数中包含2个字符串和一个日期,并将ref光标作为输出:
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”的名称

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读