c# - Oracle ORA-06502 PL/SQL : numeric or value error: character to number conversion error

标签 c# oracle odp.net

我知道有很多这样的事情,而且我基本上已经经历了所有这些事情,但我似乎找不到我的问题的答案。

我有一个功能如下的包:

FUNCTION AFunction(AString1 varchar2, ANumber NUMBER, AString2 VARCHAR2) RETURN VARCHAR2 AS

C#中我执行它就像

using (var cmd = new OracleCommand("SCHEMA.MYPACKAGE.AFunction", conn))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("AString1", "Param1");
    cmd.Parameters.Add("ANumber", 123);
    cmd.Parameters.Add("AString2", "Param2");
    cmd.Parameters.Add("ReturnValue", OracleDbType.Varchar2).Direction = ParameterDirection.ReturnValue;

    cmd.ExecuteNonQuery();
}

附加信息:ORA-06502:PL/SQL:数字或值错误:字符到数字转换错误 ORA-06512: 在第 1 行

在调试中,我可以看到 Param1Param2ReturnValuevarchar2ANumber 是 Int32。即使我将 ANumber 更改为 Int64,它仍然不起作用,而且我不确定为什么会出现此错误,因为一切看起来都很好。如果我犯了一个愚蠢的错误,有人可以向我指出吗?

如果我在蟾蜍中执行它,它就可以正常工作。

DECLARE 
  RetVal VARCHAR2(200);
  PARAM1 VARCHAR2(4000);
  PARAM2 VARCHAR2(100);
  ANUMBER NUMBER;

BEGIN 
  PARAM1 := 'AParam1';
  ANUMBER := 123;
  PARAM2 := 'AParam2';

  RetVal := SCHEMA.MYPACKAGE.AFunction ( PARAM1, ANUMBER, PARAM2 );
  COMMIT; 
END;

最佳答案

调用函数时,返回参数必须是集合中的第一个参数,所以

using (var cmd = new OracleCommand("SCHEMA.MYPACKAGE.AFunction", conn))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("ReturnValue", OracleDbType.Varchar2).Direction = ParameterDirection.ReturnValue;
    cmd.Parameters.Add("AString1", "Param1");
    cmd.Parameters.Add("ANumber", 123);
    cmd.Parameters.Add("AString2", "Param2");

    cmd.ExecuteNonQuery();
}

关于c# - Oracle ORA-06502 PL/SQL : numeric or value error: character to number conversion error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32819324/

相关文章:

c# - 我想从 mysql 中获取有关日期的数据,我已经尝试了一个它不起作用的代码

sql - 在 Derby 中插入行之前如何设置列值?

java - 从 SQL 查询 Oracle 中检索一系列记录

c# - 在 C# 中执行一个返回引用游标的 oracle 函数

oracle - Odp.net 中来自 Oracle 的多个结果集,没有引用游标

c# - ODP.Net OracleConnection.Open 冷启动很慢

c# - 使用 linq 更新列表中的列表

c# - 如何存储 Switch 语句中的 Cases 列表?

C#通过反射设置对象DateTime属性值

java - 如何在 Hibernate 中内连接两个独立实体