使用Oracle 12c客户端的存储过程填充数据集失败

时间:2018-02-26 16:19:21

标签: c# oracle ado.net

我继承了一个C#应用程序,该应用程序使用 Executedataset 方法从Oracle 11g数据库填充数据集。存储过程是PL / SQL包的一部分,目前有 3 OUT游标。我在所有客户端计算机上使用 Oracle 11g客户端。我们需要继续使用 Oracle 12c 客户端。但是,在安装Oracle 12c之后,ExecuteDataset方法失败,异常" 参数个数与存储过程的值数不匹配"。在我的研究中,我发现我只能使用一个 OUT CURSOR 。我也试过这样做,虽然Stored proc返回数据,如通过SQL开发人员调试会话看到的,我无法在我的应用程序中返回。

以下是我的简单调用,用于通过Oracle 11g获取数据:

    DataSet ds = DB.ExecuteDataSet("MY_PKG.GET_VALUES", Month,Yr, 
                                   null,null,null);

null值适用于OUT REF游标

以下是原始的存储过程定义:

    PROCEDURE GET_VALUES (
     PI_MONTH IN MDETAIL.MONTH%TYPE,
     PI_YR IN MDETAIL.YR%TYPE,
     CUR_OUT1 IN OUT MY_PKG.refcur,
     CUR_OUT2 IN OUT MY_PKG.refcur,
     CUR_OUT3 IN OUT MY_PKG.refcur
    );

我修改了过程定义,只返回一个SYS_REFCURSOR:

    PROCEDURE GET_VALUES ( 
      PI_MONTH IN MDETAIL.MONTH%TYPE,
      PI_YR IN MDETAIL.YR%TYPE,
      CUR_OUT IN OUT SYS_REFCURSOR
    );

以下是我修改后的调用,无法使用Oracle 12c获取数据:

    DataSet ds = DB.ExecuteDataSet("MY_PKG.GET_VALUES", Month,Yr,null);

我不确定参数不匹配在哪里?如果有人能帮我解决这个问题会很棒。

0 个答案:

没有答案