这是 Oracle ODP.NET 中的错误吗

Is this a bug in the Oracle ODP.NET

我很好奇这是否是 Oracle ODP.NET 提供程序中的错误。我创建了一个参数化的插入语句。我将其中一个参数命名为“:EMPNO”,并在测试时将其值设为“8000”。在数据库中,EMPNO 列被定义为 varchar2(4 字节)。但是,插入给出了

的错误消息

ORA-12899: value too large for column "HR"."HR_DEPARTURE"."EMPNO" (actual: 6, maximum: 4)

这是一些代码片段:

"INSERT INTO HR.HR_DEPARTURE (EMPNO) ':EMPNO'"

我再添加一个参数

new OracleParameter(":EMPNO", OracleDbType.Varchar2) {Value = empNo ?? Convert.DBNull}

创建命令并添加参数(有多个参数,因此是数组)

DbCommand cmd = Connection.CreateCommand();
cmd.Parameters.AddRange(sqlParams.ToArray());

我做了一些研究并考虑了诸如编码和 Oracle 默认按位置绑定(而不是 BindByName)的事实。但是,其中 none 个解决了问题。然后我在黑暗中拍摄并将参数名称更改为“:EMPN”并收到以下错误消息:

ORA-12899: value too large for column "HR"."HR_DEPARTURE"."EMPNO" (actual: 5, maximum: 4)

这促使我将参数名称更改为“:EMP”,此时查询有效。 我发现提供程序在 c# 中的参数名称上强制执行数据库列大小非常奇怪。数据库大小应该是值的强制执行('8000',我在所有测试中都保持相同)。

没有;问题是您的查询没有意义。

':EMPNO' 是一个字面值 :EMPNO 的字符串,长度为五个字符。

要引用参数,不要写字符串文字。