DB2中的列名无效

DB2中的列名无效,db2,db2-luw,Db2,Db2 Luw,我的一个表的列名有问题 我的DB2版本是DB2/LINUX8664 11.1.0。我正在CentOS Linux 7.2.1511版上运行它。我的IBMDataStudio版本是4.1.2 该列在模式“COMPRAS”的表“PERIODO”中命名为“NRO_AñO” 当我执行这个简单的查询时 SELECT NRO_AÑO FROM COMPRAS.PERIODO 它会产生以下错误: "NRO_AÑO" is not valid in the context where it is used..

我的一个表的列名有问题

我的DB2版本是DB2/LINUX8664 11.1.0。我正在CentOS Linux 7.2.1511版上运行它。我的IBMDataStudio版本是4.1.2

该列在模式“COMPRAS”的表“PERIODO”中命名为“NRO_AñO”

当我执行这个简单的查询时

SELECT NRO_AÑO
FROM COMPRAS.PERIODO
它会产生以下错误:

"NRO_AÑO" is not valid in the context where it is used.. SQLCODE=-206, SQLSTATE=42703, DRIVER=3.68.61
如果我执行查询

SELECT *
FROM COMPRAS.PERIODO
它生成具有以下列的数据

我猜这与所涉及的字符集有关,但我不确定该看哪里

提前谢谢。

这对我很有用:

[db2inst1@server ~]$ db2 "create table compras.periodo (nro_año int)"
DB20000I  The SQL command completed successfully.
[db2inst1@server ~]$ db2 "insert into compras.periodo values (1)"
DB20000I  The SQL command completed successfully.
[db2inst1@server ~]$ db2 "insert into compras.periodo (nro_año) values (2)"
DB20000I  The SQL command completed successfully.
[db2inst1@server ~]$ db2 "select nro_año from compras.periodo"

NRO_AÑO
-----------
          1
          2

  2 record(s) selected.
可能您遇到了控制台编码问题(putty),您应该检查数据库中列的名称是如何存储的:

db2 "select colname from syscat.columns where tabname = 'PERIODO'"

COLNAME                                                                                                         
--------------------------------------------------------------------------------------------------------------------------------
NRO_AÑO                                                                                                         

  1 record(s) selected.
从Putty(SSH客户端)创建表,然后从DataStudio中选择,然后高于128的字符将具有不同的表示形式。Java(DataStudio)使用UTF-8,但用于创建表的脚本可能使用了另一种编码,这在数据库(Putty、Windows、记事本等)中存在问题。

它对我有效:

[db2inst1@server ~]$ db2 "create table compras.periodo (nro_año int)"
DB20000I  The SQL command completed successfully.
[db2inst1@server ~]$ db2 "insert into compras.periodo values (1)"
DB20000I  The SQL command completed successfully.
[db2inst1@server ~]$ db2 "insert into compras.periodo (nro_año) values (2)"
DB20000I  The SQL command completed successfully.
[db2inst1@server ~]$ db2 "select nro_año from compras.periodo"

NRO_AÑO
-----------
          1
          2

  2 record(s) selected.
可能您遇到了控制台编码问题(putty),您应该检查数据库中列的名称是如何存储的:

db2 "select colname from syscat.columns where tabname = 'PERIODO'"

COLNAME                                                                                                         
--------------------------------------------------------------------------------------------------------------------------------
NRO_AÑO                                                                                                         

  1 record(s) selected.

从Putty(SSH客户端)创建表,然后从DataStudio中选择,然后高于128的字符将具有不同的表示形式。Java(DataStudio)使用UTF-8,但用于创建表的脚本可能使用了另一种编码,这在数据库(Putty、Windows、记事本等)中存在问题。

当我在DB29.7上从DB2命令行处理器运行脚本时,它对我起到了作用

db2 => CREATE TABLE TEMP_TABLE(NRO_AÑO INTEGER)
DB20000I  The SQL command completed successfully.
db2 => INSERT INTO TEMP_TABLE(NRO_AÑO) VALUES(1)
DB20000I  The SQL command completed successfully.
db2 => SELECT * FROM TEMP_TABLE

NRO_AÑO
-----------
   1

1 record(s) selected.

db2 => select colname from syscat.columns where tabname = 'TEMP_TABLE'

COLNAME
------------
NRO_AÑO

  1 record(s) selected.

当我在DB29.7上从DB2命令行处理器运行脚本时,它对我起到了作用

db2 => CREATE TABLE TEMP_TABLE(NRO_AÑO INTEGER)
DB20000I  The SQL command completed successfully.
db2 => INSERT INTO TEMP_TABLE(NRO_AÑO) VALUES(1)
DB20000I  The SQL command completed successfully.
db2 => SELECT * FROM TEMP_TABLE

NRO_AÑO
-----------
   1

1 record(s) selected.

db2 => select colname from syscat.columns where tabname = 'TEMP_TABLE'

COLNAME
------------
NRO_AÑO

  1 record(s) selected.

您的问题还可能是列需要用引号括起来,如IBM Data Studio 4版中所示,例如:

插入DB2ADMIN.FB_WEB_帖子(“用户名”、“FaceID”、“FaceURL”、“FaceStory”、“FaceMessage”、“FaceDate”、“FaceStamp”)


值('SocialMate'、'233555900321179128370012103999'、'Some Message or Story'、'Random Files Project for Lotus Notes、Google、Oracle应用程序示例'、'2017-09-09'、'2017-09.23')

您的问题还可能是列需要用引号括起来,如IBM Data Studio 4版中所示,例如:

插入DB2ADMIN.FB_WEB_帖子(“用户名”、“FaceID”、“FaceURL”、“FaceStory”、“FaceMessage”、“FaceDate”、“FaceStamp”)


值('SocialMate'、'233555900321179128370012103999'、'Some Message or Story'、'Random Files Project for Lotus Notes、Google、Oracle应用程序示例'、'2017-09-09'、'2017-09.23')

您可以尝试以下查询:
从COMPRAS.PERIODO
中选择“NRO_AñO”吗?可能转义列名可以解决特殊字符问题。@TimBiegeleisen same-206错误。这看起来像是编码问题,但我对DB2了解不够,无法提供进一步帮助。数据库代码页是什么<代码>从SYSIBMADM.DBCFG中选择值,其中NAME='codepage'。Linux会话中的区域设置是什么?安装DataStudio时是否选择了相同的区域设置,或者它是默认的
en_US
?根据您的其他评论,创建表时似乎发生了错误。检查db2 descripe table compras.periodo返回的内容以及table DDL语句(
db2look-d yourdb-z compras-t periodo-e
)。您可能需要重新创建表。是否可以尝试此查询:
从COMPRAS.PERIODO中选择“NRO_AñO”
?可能转义列名可以解决特殊字符问题。@TimBiegeleisen same-206错误。这看起来像是编码问题,但我对DB2了解不够,无法提供进一步帮助。数据库代码页是什么<代码>从SYSIBMADM.DBCFG中选择值,其中NAME='codepage'。Linux会话中的区域设置是什么?安装DataStudio时是否选择了相同的区域设置,或者它是默认的
en_US
?根据您的其他评论,创建表时似乎发生了错误。检查db2 descripe table compras.periodo返回的内容以及table DDL语句(
db2look-d yourdb-z compras-t periodo-e
)。可能您需要重新创建表。奇怪的是,syscat.columns中的列名为NULL!表结构包括列名。奇怪的是,syscat.columns中的列名为NULL!包含列名的表结构。