【问题标题】:How to call a Stored Procedure inside an oracle package with Entity Framework?如何使用实体框架在 oracle 包中调用存储过程?
【发布时间】:2014-03-24 19:23:13
【问题描述】:

我在 oracle 11g 中有一个包如下:

CREATE OR REPLACE PACKAGE "HRS.PKG_TRAINING_SP" as
TYPE T_CURSOR IS REF CURSOR;

procedure GETPERSONNELTRAINIGLIST(
        personnel_Id_in in string,
        base_date_in in string,
        is_current_in in number,
        lst OUT T_CURSOR );
end;

如何使用实体框架(代码优先)执行上述程序包(GETPERSONNELTRAINIGLIST)?

注意:我正在为 Oracle 使用实体框架 6.0(代码优先)和 devart EF Provider

更新: 我正在使用以下代码:

var param1 = new OracleParameter("personnel_Id_in", OracleDbType.VarChar, "c5eb5589-8fee-47b6-85ad-261a0307cc16", ParameterDirection.Input);
var param2 = new OracleParameter("base_date_in", OracleDbType.VarChar, "1112", ParameterDirection.Input);
var param3 = new OracleParameter("is_current_in", OracleDbType.Number, 1, ParameterDirection.Input);

var ATests =
    db.Database.SqlQuery<ATest>(
    "BEGIN PKG_TRAINING_SP.GETPERSONNELTRAINIGLIST(:personnel_Id_in, :base_date_in, :is_current_in); end;", 
    param1,  param2, param3).ToList();

但出现以下错误:

{"ORA-06550: line 1, column 7:\nPLS-00306: wrong number or types of arguments in call to 'GETPERSONNELTRAINIGLIST'\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored"}

【问题讨论】:

    标签: c# oracle entity-framework oracle11g devart


    【解决方案1】:

    请按以下方式重写您的代码:

    var param1 = new OracleParameter("personnel_Id_in", OracleDbType.VarChar, "c5eb5589-8fee-47b6-85ad-261a0307cc16",  ParameterDirection.Input);
    var param2 = new OracleParameter("base_date_in", OracleDbType.VarChar, "1112", ParameterDirection.Input);
    var param3 = new OracleParameter("is_current_in", OracleDbType.Number, 1, ParameterDirection.Input);
    var param4 = new OracleParameter("result", OracleDbType.Cursor, ParameterDirection.Output);
    
    var ATests =
    db.Database.SqlQuery<ATest>(
    "BEGIN PKG_TRAINING_SP.GETPERSONNELTRAINIGLIST(:personnel_Id_in, :base_date_in, :is_current_in, :result); end;", 
    param1,  param2, param3, param4).ToList();
    

    另外,我们已经在我们的论坛http://forums.devart.com/viewtopic.php?t=29019与您联系

    【讨论】:

    【解决方案2】:

    您没有指定游标变量。

    lst OUT T_CURSOR
    

    这就是你有错误的原因。

    您可以从这里possible answer 尝试解决方案。

    【讨论】:

    • 如何将lst 参数放入db.Database.SqlQuery
    • this 不能提供帮助吗?关于ref cursor,但我认为制作它没有真正的问题吗?
    猜你喜欢
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多