主机变量或参数* N的转换错误

时间:2009-09-10 17:37:01

标签: sql ibm-midrange

我在使用带有JDBC的Java时将插入语句的错误传递给AS400数据库。

4 个答案:

答案 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 = ?

解决了我的问题。

在这里看起来很容易捉住,但是如果查询量很大,这很容易被忽略。浪费了大约一个小时。