1

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

ORA-12899: 列 "HR"."HR_DEPARTURE"."EMPNO" 的值太大(实际值:6,最大值: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)这一事实。但是,这些都没有解决问题。然后我在黑暗中拍摄并将参数名称更改为“:EMPN”并收到以下错误消息:

ORA-12899: 列 "HR"."HR_DEPARTURE"."EMPNO" 的值太大(实际值:5,最大值:4)

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

4

1 回答 1

5

不; 问题是您的查询毫无意义。

':EMPNO'是一个带有字面值的字符串:EMPNO,它有五个字符长。

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

于 2015-05-13T20:53:54.673 回答