Teradata使用SELECT查询创建表时需要注意的问题
2009-08-11 20:07
549 查看
创建可变临时表Bank_Acct_AL1:
CREATE VOLATILE MULTISET TABLE Bank_Acct_AL1,NO LOG as
(select task_name
,count_num
,'' as c3
from dwPDATA.fanxiaoliang_unittest )WITH DATA
PRIMARY INDEX (task_name)
ON COMMIT PRESERVE ROWS;
查看创建好的表的定义:
show table Bank_Acct_AL1;
结果如下:
CREATE MULTISET VOLATILE TABLE DWJOB.Bank_Acct_AL1 ,NO FALLBACK ,
CHECKSUM = DEFAULT,
NO LOG
(
task_name VARCHAR(100) CHARACTER SET LATIN NOT CASESPECIFIC,
count_num INTEGER,
c3 VARCHAR(0) CHARACTER SET UNICODE NOT CASESPECIFIC)
PRIMARY INDEX ( task_name )
ON COMMIT PRESERVE ROWS;
问题:
c3 字段为VARCHAR(0),如果我们向Bank_Acct_AL1表插入c3字段不为空字符的数据将会报错。
为了避免上述问题的出现,我们应该像下面那样处理,建表语句如下:
CREATE VOLATILE MULTISET TABLE Bank_Acct_AL1,NO LOG as
(select task_name
,count_num
,cast('' as varchar(50))as c3
from dwPDATA.fanxiaoliang_unittest )WITH DATA
PRIMARY INDEX (task_name)
ON COMMIT PRESERVE ROWS;
再次查看创建好的表的定义:
show table Bank_Acct_AL1
结果如下:
CREATE MULTISET VOLATILE TABLE DWJOB.Bank_Acct_AL1 ,NO FALLBACK ,
CHECKSUM = DEFAULT,
NO LOG
(
task_name VARCHAR(100) CHARACTER SET LATIN NOT CASESPECIFIC,
count_num INTEGER,
c3 VARCHAR(50) CHARACTER SET UNICODE NOT CASESPECIFIC)
PRIMARY INDEX ( task_name )
ON COMMIT PRESERVE ROWS;
总结:为了避免上面的问题出现,有两种解决方法:
1、不使用select 查询创建表结构,而先按需要的字段类型创建表,然后插入查询中的数据;
2、像上面那样处理,对空字符需要cast为需要的数据类型。
CREATE VOLATILE MULTISET TABLE Bank_Acct_AL1,NO LOG as
(select task_name
,count_num
,'' as c3
from dwPDATA.fanxiaoliang_unittest )WITH DATA
PRIMARY INDEX (task_name)
ON COMMIT PRESERVE ROWS;
查看创建好的表的定义:
show table Bank_Acct_AL1;
结果如下:
CREATE MULTISET VOLATILE TABLE DWJOB.Bank_Acct_AL1 ,NO FALLBACK ,
CHECKSUM = DEFAULT,
NO LOG
(
task_name VARCHAR(100) CHARACTER SET LATIN NOT CASESPECIFIC,
count_num INTEGER,
c3 VARCHAR(0) CHARACTER SET UNICODE NOT CASESPECIFIC)
PRIMARY INDEX ( task_name )
ON COMMIT PRESERVE ROWS;
问题:
c3 字段为VARCHAR(0),如果我们向Bank_Acct_AL1表插入c3字段不为空字符的数据将会报错。
为了避免上述问题的出现,我们应该像下面那样处理,建表语句如下:
CREATE VOLATILE MULTISET TABLE Bank_Acct_AL1,NO LOG as
(select task_name
,count_num
,cast('' as varchar(50))as c3
from dwPDATA.fanxiaoliang_unittest )WITH DATA
PRIMARY INDEX (task_name)
ON COMMIT PRESERVE ROWS;
再次查看创建好的表的定义:
show table Bank_Acct_AL1
结果如下:
CREATE MULTISET VOLATILE TABLE DWJOB.Bank_Acct_AL1 ,NO FALLBACK ,
CHECKSUM = DEFAULT,
NO LOG
(
task_name VARCHAR(100) CHARACTER SET LATIN NOT CASESPECIFIC,
count_num INTEGER,
c3 VARCHAR(50) CHARACTER SET UNICODE NOT CASESPECIFIC)
PRIMARY INDEX ( task_name )
ON COMMIT PRESERVE ROWS;
总结:为了避免上面的问题出现,有两种解决方法:
1、不使用select 查询创建表结构,而先按需要的字段类型创建表,然后插入查询中的数据;
2、像上面那样处理,对空字符需要cast为需要的数据类型。
相关文章推荐
- 关于SelectOjbect使用需要注意的一些问题
- Select语句中使用FOR ALL ENTRIES IN需要注意的问题(转帖)
- Windows下使用创建多层文件夹 SHCreateDirectoryEx 函数需要注意的问题
- Select语句中使用FOR ALL ENTRIES IN需要注意的问题
- SqlServer中使用Select语句给变量赋值的时候需要注意的一个问题
- iBatis下使用like查询,以及需要注意的问题
- 使用Entity Framework Core需要注意的一个全表查询问题
- 使用Atl 创建Com对象需要注意的问题
- 使用HQL语句查询的时候需要注意的一些问题
- 使用JDBC将查询结果集保存为对象时需要注意的问题
- 使用百度地图需要注意的问题
- php array_merge函数使用需要注意的一个问题
- 使用VS2005开发64位驱动程序需要注意的一些问题
- 使用scribe来收集数据需要注意的问题
- insert into...select需要注意的问题
- 在DataTable中查询应该注意的问题 (DataTable.select)
- 创建索引需要注意的问题
- Hibernate使用二级缓存时,createSQLQuery需要注意的问题
- Hibernate使用二级缓存时,createSQLQuery需要注意的问题
- 使用PreparedStatement的execute方法需要注意的问题