C# ODP.NET 调用Oracle函数报错的问题

2019-12-05 11:28发布

C# 如何通过ODP.NET调用Oracle函数?

增删改查,执行存储过程都可以,唯独不能调用函数,虽然能够通过调用带有输出参数的存储过程,但是这样需要花大量时间修改Oracle里的函数。
以下是我的代码,报错内容如下:

ODP.NET版本信息如下:

C# 代码如下:
/// <summary>
/// 执行函数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnExeFunc_Click(object sender, EventArgs e)
{
// 获取选中行
int strRowIdex = dgvMain.CurrentCell.RowIndex;
// 创建参数对象syid和返回值对象v_j
OracleParameter[] param = new OracleParameter[] {
new OracleParameter("v_syid", OracleDbType.Varchar2, 100),
new OracleParameter("V_J", OracleDbType.Varchar2, 200)
};
param[0].Value = dgvMain.Rows[strRowIdex].Cells["SYID"].Value;
//param[0].Direction = ParameterDirection.Input;
param[1].Direction = ParameterDirection.ReturnValue;
// 更新数据库表
OracleHelper.ExecuteNonQuery(OracleHelper.oraConnStr, CommandType.StoredProcedure, OracleSQL.ExeFunWzjPerson, param);
// 消息提示
MessageBox.Show("执行成功!", "提示");
MessageBox.Show(param[1].Value.ToString(), "提示");
}

Oracle 函数如下:

CREATE OR REPLACE FUNCTION f_update_wzj_person (v_syid in VARCHAR2) return varchar2 is
V_J VARCHAR2(80);
begin
V_J := '1123';
update wzj_person t set t.birthday = sysdate - 10 where t.syid = v_syid;
commit;
return(V_J);
end;

1条回答
Emotional °昔
2楼-- · 2019-12-05 11:40

升级ODP.NET版本解决。。。。

查看更多
登录 后发表回答