IBM Data Studio使用----对象创建的双引号/大小写问题以及表/列重命名
2012-10-28 16:26
956 查看
问题描述
使用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)
使用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)
相关文章推荐
- IBM Data Studio使用----对象创建的双引号/大小写问题以及表/列重命名
- 仿MFC实现c++按名动态创建对象之续(瘦身以及解决其在dll中使用的问题)
- 使用 IBM Data Studio 为 WAS 创建和部署 Data Web Services
- CoreData的使用/以及coreData中的多线程问题/版本迁移(二)
- 64位操作系统使用7.0版winiis系统,报ActiveX 部件不能创建对象问题!
- Aqua Data Studio 第一次使用遇到的问题(转自网络资料)
- 如何解决ASP使用FFMPEG进行视频截图时报出的“无法创建对象”问题
- 同时安装ASA10以及ASA11两个数据库导致不能使用SQLSERVER2005 management studio的问题解决
- IBM Data Studio使用----窗口显示所有行
- android studio 使用以及常出现的问题
- JavaScript之面向对象学习六原型模式创建对象的问题,组合使用构造函数模式和原型模式创建对象
- 解决MVC使用时Views必须引用完整的命名空间才得到对象的问题
- CreateEvent 创建和使用一个命名的事件对象
- Android笔记 Application对象的使用-数据传递以及内存泄漏问题
- NSURL使用urlWithString得到的对象为nil的问题原因以及解决
- Android Application对象的使用-数据传递以及内存泄漏问题
- android - Application对象的使用-数据传递以及内存泄漏问题
- 【Unity&对象数组】如何创建一个长度不确定的对象数组以及使用方法&墙壁单元方块对象数组
- Android笔记 Application对象的使用-数据传递以及内存泄漏问题
- JAVA中对象的创建以及String的对象个数问题