C# 调用简单oracle自定义函数的问题

madyak 2015-01-09 11:06:37
测测试的oracle函数
create or replace function BeenSettled(sExamNo in varchar2) return integer is
sRcptNo varchar2(8);
begin

IF not sRcptNo is null then
return 1;
else
return 0;
end if;
end BeenSettled;

///////////////////////////////////////////////////
OleDbParameter[] Paramslist1 = new OleDbParameter[2];
Paramslist1[0] = new OleDbParameter("sExamNo", OleDbType.VarChar, 50);
Paramslist1[0].Direction = ParameterDirection.Input;
Paramslist1[0].Value = "123";
Paramslist1[1] = new OleDbParameter("result", OleDbType.Integer, 50);
Paramslist1[1].Direction = ParameterDirection.ReturnValue;

string SPName = "BEENSETTLED";

OleDBOracleHelper.ExecuteNonQuery(conn, CommandType.StoredProcedure, SPName, Paramslist1);
ReturnInt = Convert.ToInt32(Paramslist1[1]);
MessageBox.Show(ReturnInt.ToString());
但是总报错:

e.Message "ORA-06550: line 1, column 7:\nPLS-00306: wrong number or types of arguments in call to 'BEENSETTLED'\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored" string
谁知道为什么?加为架构的问题,必需要用OleDBOracleHelper类来执行。
...全文
162 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
madyak 2015-01-09
  • 打赏
  • 举报
回复
我的这个函数因为没有涉及到数据集的问题,所以没与包相关的东西。 如果从PLSQL 中看函数的位置在Functions的目录中。 就是recycle bin,functions,Procedures那些内容的Functions下面
灬浪子灬 2015-01-09
  • 打赏
  • 举报
回复
引用 楼主 madyak 的回复:
测测试的oracle函数 create or replace function BeenSettled(sExamNo in varchar2) return integer is sRcptNo varchar2(8); begin IF not sRcptNo is null then return 1; else return 0; end if; end BeenSettled; /////////////////////////////////////////////////// OleDbParameter[] Paramslist1 = new OleDbParameter[2]; Paramslist1[0] = new OleDbParameter("sExamNo", OleDbType.VarChar, 50); Paramslist1[0].Direction = ParameterDirection.Input; Paramslist1[0].Value = "123"; Paramslist1[1] = new OleDbParameter("result", OleDbType.Integer, 50); Paramslist1[1].Direction = ParameterDirection.ReturnValue; string SPName = "BEENSETTLED"; OleDBOracleHelper.ExecuteNonQuery(conn, CommandType.StoredProcedure, SPName, Paramslist1); ReturnInt = Convert.ToInt32(Paramslist1[1]); MessageBox.Show(ReturnInt.ToString()); 但是总报错: e.Message "ORA-06550: line 1, column 7:\nPLS-00306: wrong number or types of arguments in call to 'BEENSETTLED'\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored" string 谁知道为什么?加为架构的问题,必需要用OleDBOracleHelper类来执行。
调用没有问题 你的函数在那个包下面 这些都要写清楚
madyak 2015-01-09
  • 打赏
  • 举报
回复
谢谢提醒,我搜过了,确实也有相关资料,但我这里用提是OleDBOracleHelper这个类,关于这个类的这种用法没有找到。
於黾 2015-01-09
  • 打赏
  • 举报
回复
搜一搜:C#调用存储过程 不要老说什么"自定义函数",虽然它是那个意思 不用术语,自己发明名词,想搜结果可就难了
madyak 2015-01-09
  • 打赏
  • 举报
回复
如果大侠帮忙,直接改好发上来最好了。 会不会是OleDBOracleHelper不支持函数?
madyak 2015-01-09
  • 打赏
  • 举报
回复
谢谢大家关注,已经放弃这样做了。应该是OleDBOracleHelper这种调用试本身就不能支持函数,经过修改后出现这样的提示 ORA-06550: line 1, column 7: PLS-00221: 'BEENSETTLED' is not a procedure or is undefined ORA-06550: line 1, column 7: PL/SQL: Statement ignored 现在 要求第三方把oracle函数改为存储过程就不用这样费事了。

110,476

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧