我在使用带有JDBC的Java时将插入语句的错误传递给AS400数据库。
答案 0 :(得分:6)
我想通了,我有一个数字字段,长度为4,十进制数字为2,在我的插入中,我试图在这个数字字段中插入100,这给出了这个错误。
I altered the table and made it numeric with length 9 and decimal digits 2
and the insert worked.
即使错误显示“转换错误”,实际上也是错误的字段长度。
答案 1 :(得分:1)
当一个表从2位更新为3用于用户ID时,我遇到了这个问题,并且查询插入到历史表中,其中历史表没有更新为用户ID的3位数。使用Alter Table
来更正历史记录表,一切顺利。
alter table "Table Name" ALTER COLUMN "COLUMN NAME" SET DATA TYPE NUMERIC(3)
错误消息不直观:
变量或参数的转换错误* N(# - 302)[IBM] [系统 iAccess ODBC驱动程序] [DB2 for i5 / OS] SQL0012 - 无关联 列“columnname”到表“Tablename”的限定条件。 (#12)
答案 2 :(得分:0)
我今天在运行以下查询时遇到此错误:
select *
from mytable
where invoice_date >= '2019-01-01'
原来发票“日期”不是日期,而是一个十进制的模拟日期。也许数据库设计不佳,但是简单的解决方法是:
select *
from mytable
where invoice_date >= 20190101
答案 3 :(得分:0)
我的问题是我忽略了参数占位符周围有单引号的事实。所以我遇到了6 -- Numeric data that is not valid.
错误。
例如,
select someColumn
From favTable
where someOtherColumn = '?'
command.Parameters.Add("decVal", OleDbType.Decimal, 10).Value = model.someDecVal;
更正为:
select someColumn
From favTable
where someOtherColumn = ?
解决了我的问题。
在这里看起来很容易捉住,但是如果查询量很大,这很容易被忽略。浪费了大约一个小时。