gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:33:31 25 4
gpt4 key购买 nike

我有一个 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 个字符串单元格行。

我在我的 Entity Framework 模型中导入了这个存储过程,在 .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”

关于c# - 使用 EF 调用 oracle 存储过程失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31206244/

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