如何解决如何从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 举报,一经查实,本站将立刻删除。