DB2中的列名无效

时间:2017-03-14 13:23:08

标签: db2 db2-luw

我在使用其中一个表的列名时遇到问题。

我的DB2版本是DB2 / LINUXX8664 11.1.0。我在CentOS Linux版本7.2.1511上运行它。我的IBM Data Studio版本是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

它产生的数据包含以下列

enter image description here

我猜它与涉及的字符集有关,但我不知道在哪里看。

提前致谢。

3 个答案:

答案 0 :(得分:0)

它对我有用:

[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客户端)创建表,然后从Data Studio中选择,然后高于128的字符将具有不同的表示。 Java(DataStudio)使用UTF-8,但是用于创建表的脚本可能使用了另一种编码,这在数据库中存在问题(Putty,Windows,Notepad等)。

答案 1 :(得分:0)

当我从DB2 9.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.

答案 2 :(得分:0)

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

INSERT INTO DB2ADMIN.FB_WEB_POSTS(“UserName”,“FaceID”,“FaceURL”,“FaceStory”,“FaceMessage”,“FaceDate”,“FaceStamp”)

VALUES('SocialMate','233555900032117_912837012103999','http://localhost/doculogs.nsf/index.html','某些消息或故事','Lotus Notes,Google,Oracle App samples的随机文件项目','2017-09-09' ,'2017-09.23');