我继承了一个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);
我不确定参数不匹配在哪里?如果有人能帮我解决这个问题会很棒。