IBM IDAA查询特定列报错SQLCODE=-206,求故障原因
问题分析与解决
这个SQLCODE=-206的错误其实是IBM DB2(包括IDAA加速器)里很常见的大小写标识符坑,我来给你拆解清楚:
故障根源
看你创建表的语句:
CREATE TABLE aot_table ( "col_1" decimal(11,0) NOT NULL , "col_2" smallint, "col_3" smallint, ) IN ACCELERATOR my_accel;
你给列名col_1加上了双引号,这会触发DB2的区分大小写标识符规则——也就是说,数据库会把这个列名严格存储为小写的col_1,而不是默认的大写形式COL_1。
为什么查SELECT *没问题?因为*会直接返回表中所有列,数据库不会去解析列名的大小写匹配。但当你单独写SELECT col_1时,DB2会默认把没加引号的标识符自动转成大写COL_1,而你的表中根本不存在这个大写列名,自然就抛出了“列在当前上下文无效”的错误。
解决方法
有两种简单的修复方式:
- 方法一:查询时给列名加双引号
执行这条语句就能正常拿到数据:SELECT "col_1" from MY_USER.aot_table; - 方法二:重建表时去掉列名的双引号
如果你不需要区分大小写的列名,重建表时直接去掉双引号,DB2会自动将列名转为大写存储:
之后不管你写CREATE TABLE aot_table ( col_1 decimal(11,0) NOT NULL , col_2 smallint, col_3 smallint ) IN ACCELERATOR my_accel;col_1还是COL_1查询,都能正常返回结果。
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

