对象创建的双引号/大小写问题以及表/列重命名

使用Data Studio进行表的创建后,对该表使用查询语句总是会出现“XXX是一个未定义的名称”的错误。如图:

对象创建的双引号/大小写问题以及表/列重命名

使用Data Studio的默认设置创建的表(非手动SQL脚本创建),无论是在Data Studio脚本编辑器还是命令行中都会出现这种错误,原因在于使用Data Studio自动建表时自动生成的DDL中会对所有的对象名添加双引号。如图:

对象创建的双引号/大小写问题以及表/列重命名

也就是说,SQL语句中的表名和列名都需要加上双引号才能正常执行。(注:字符串是单引号)如上面的查询语句改为:

select * from "Student"

就能够执行了。还要注意的是,DB2 中对于双引号括起来的表名,列名是大小写敏感的,"Student"写成"student"同样会出错。

解决办法

其实,出现这种双引号的问题的原因是DB2的对象大小写规则的问题。

使用SQL创建表或列对象时指定的表名,列名无论大小写,DB2全部都会自动转换为大写。如创建名为Student的表,创建完成后表名变成STUDENT。

如果一定要使用小写,就需要使用双引号将表名,列名等对象括起来,这样DB2就不会进行自动转换了,但同时在这样的表,列参与查询时,也必须使用双引号括起来。

预防双引号的产生

而在Data Studio中,自动生成DDL的默认设置是:一旦对象名含小写字符,就使用双引号括起来,全大写就不用双引号。例如上图中的DLL,Student,Name,Age都自动加了双引号,但ID就没有加。

所以解决的办法有以下几种:

1.指定表名,列名等对象时都统一指定为大写的;

2.手动使用SQL语句完成操作,避免使用DDL自动生成(避免多管闲事);

3.修改自动生成的DDL后再执行(去掉双引号后创建出来的对象就都是大写的);

4.设置Data Studio。在“首选项”->“数据管理”->“DDL生成”中,去掉“缺省情况下数据库对象标识加上引号”前的勾,这样生成的DDL就不会带双引号了。不过这个设置在我的Ubuntu下无效,不知道是不是个例。

处理产生的双引号

如果带双引号的表或列已经生成了,想要去掉双引号该怎么办呢?(毕竟带双引号查询不方便)

方法就是进行表或列的重命名。

DB2的表重命名语句是:

RENAME TABLE 表名 TO 新表名    

(无论新表名是大写还是小写,都自动转换为大写,如:rename table "Student" to student,重命名表为STUDENT。索引重命名语法也一样)

DB2的列重命名语句是:

ALTER TABLE 表名 RENAME   COLUMN  列名 TO 新列名

(同样,新列名也自动转换为大写。如alter table STUDENT rename column "Name" to name,重命名列Name为NAME)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/f965046feea3f4e23110ea2c92117cc9.html