现象:
在PLSQLDEV开发工具下按照如下三个步骤执行SQL,具体步骤如下:
1. drop
table CLDATA2_TMP purge
2. create
table CLDATA2_TMP compress for query high as
select * from DRAWINGS partition (P20140) where data_load_type
in(‘a’,’d’)
3.
alter table DRAWINGS exchange partition P20140 with table
CLDATA2_TMP without validation
报错现象为:
http://s3/mw690/003d54oKgy70i72zRwS72&690
分析:
1.
错误报告显示列类型及大小不匹配,因此查看了系统表sys.all_tab_columns进行比对两表的列字段名及相关类型大小
http://s10/mw690/003d54oKgy70i74uOiB39&690
注:查看两表字段的个数是否一致
2.
根据系统表查出的表结构清单放置EXCEL进行比对
http://s11/mw690/003d54oKgy70i7d3WeSda&690
注:将两表相同字段的数据大小通过IF函数放置在同一行
http://s14/mw690/003d54oKgy70i7jQcNf4d&690
注:根据E2与D2通过函数IF进行比对是否相等,若D与E列都有值的情况下比对结果为1说明列类型大小相等
3.
通过EXCEL比对结果发现列名及大小都相等,这时不知道如何查找原因,感觉不应该报错
4.
经过请教发现原来系统中还有一张系统视图sys.all_tab_cols,于是通过此视图查找发现原来表DRAWINGS含有隐藏列字段,通过CREATE
TABLE建表不会创建隐藏列。
http://s12/mw690/003d54oKgy70i7pTXKzab&690
总结:若想查看表中列字段的详细信息最好使用系统视图SYS.ALL_TAB_COLS查看,经过分析发现SYS.ALL_TAB_COLUMNS中的所有信息都包含在内。
加载中,请稍候......