我设置了一个IBM IDAA,在那里我创建了一个仅包含加速器的表,其中包含CREATE语句:
CREATE TABLE aot_table (
"col_1" decimal(11,0) NOT NULL ,
"col_2" smallint,
"col_3" smallint,
) IN ACCELERATOR my_accel;
然后,我用INSERTS手动加载了它和测试数据。当我用查询时
SELECT * from MY_USER.aot_table;
我得到了预期的数据。
但如果我尝试直接查询col_1,如下所示:
SELECT col_1 from MY_USER.aot_table;
我收到一个错误:
`从MY_USER.aot_table 中选择col_1
COL_1在使用它的上下文中无效。SQLCODE=-206,SQLSTATE=42703,DRIVER=4.24.92`
有人知道为什么会发生这种事吗?
如果您创建的表的列名和小写colname两边都有双引号,如您的问题所示,那么您的查询也必须对列名进行双引号并匹配列名大小写。
否则,Db2将不带引号的列名折叠为大写,这将与小写列名不匹配,这将导致异常。
因此,请尝试select "col_1" from MY_USER.aot_table
,假设tabschema也是MY_USER。请注意引用的列名。
如果您不想在查询中对列名使用双引号,那么就不要在create table
语句中的列名周围使用双引号。查询中未报价的列名将折叠为大写,这通常对SQL更方便。