如何从C#调用Oracle Function

问题描述

我有一个函数FUNC_GETPERSADDRS:

CREATE OR REPLACE FUNCTION DEVDB.FUNC_GETPERSADDRS 
(
  IN_PERSNBR IN NUMBER,IN_FROMDATE IN VARCHAR2,IN_THRUDATE IN VARCHAR2
)
RETURN persaddrstype AS 
  persaddrs persaddrstype;
BEGIN
      PROC_GETPERSADDRS(in_persnbr,in_fromdate,in_thrudate,persaddrs);
  RETURN persaddrs;
END FUNC_GETPERSADDRS;

我刚刚在输入参数中添加了IN_FROMDATE和AND_THRUDATE。由于添加了这些附加参数,无论我尝试什么,我都会收到错误消息:ORA-06553:PLS-306错误的数字或调用FUNC_GETPERSADDRS的参数类型;

在附加参数之前起作用的sql字符串是:

 sql = @"SELECT * FROM TABLE(DEVDB.FUNC_GETORGADDRS(" + input[0] + ")) ORDER BY DATELASTMAINT DESC";

其中input [0]是一个数字字符串。这没有问题,但是当我尝试添加其他新参数时:

sql = @"SELECT * FROM TABLE(DEVDB.FUNC_GETPERSADDRS(" + input[0] + ",'" + input[1].ToString() + "','" + input[2].ToString() + "'" + ")) ORDER BY DATELASTMAINT DESC"

我总是会收到该错误

我读了一些有关必须声明函数的返回值的文章,所以我尝试了以下方法:

omm.CommandText = "SELECT * FROM TABLE(DEVDB.FUNC_GETPERSADDRS(:IN_PERSNBR,:IN_FROMDATE,:IN_THRUDATE)) ORDER BY DATELASTMAINT DESC";
                        comm.Parameters.Add(new OracleParameter("persaddrs",OracleDbType.Object,ParameterDirection.ReturnValue));
                        comm.Parameters.Add(new OracleParameter("IN_PERSNBR",OracleDbType.Decimal,ParameterDirection.Input)).Value = int.Parse(input[0]);
                        comm.Parameters.Add(new OracleParameter("IN_FROMDATE",OracleDbType.Varchar2,ParameterDirection.Input)).Value = input[1];
                        comm.Parameters.Add(new OracleParameter("IN_THRUDATE",ParameterDirection.Input)).Value = input[2];

但是我仍然会收到关于错误数量或参数类型的相同错误,如果是这种情况,为什么仅提供一个参数时内联sql字符串就能工作?同样使用自定义返回类型,像我尝试过的那样,OracleDbType.Object是否正确?

任何想法都会受到赞赏。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...