[英]Is this a bug in the Oracle ODP.NET
我很好奇这是否是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”,我在所有测试中均保持相同)。
没有; 问题是您的查询没有意义。
':EMPNO'
是字面值:EMPNO
的字符串,其长度为五个字符。
要引用参数,请不要编写字符串文字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.