我正在尝试联合三个表,每个表都应该具有相同的列和相同的数据类型:
select *
from ALL_1
union all
select *
from ALL_2
union all
select *
from ALL_3
/我一直收到"ORA-01790:表达式必须与相应的表达式具有相同的数据类型“,所以很明显,其中一个表中的一个数据类型是不同的。每个表应该有40列。我想并排查看每一列的数据类型,以便能够搜索差异。我该怎么做呢?
发布于 2017-01-31 07:54:46
在SQL*Plus、SQL Developer、Toad中,您可以使用SQL*Plus命令DESCRIBE。
例如:
SQL> describe scott.emp
Name Null? Type
------------------------------------------------- -------- ------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)否则,您可以查询目录表。这种方法可能更好,因为您可以编写代码来为您进行检查(以准确地找到差异所在),而不是手动进行检查。
SQL> select column_name, data_type, data_length, data_precision, data_scale
2 from all_tab_columns
3 where owner = 'SCOTT' and table_name = 'EMP'
4 order by column_id;
COLUMN_NAME DATA_TYPE DATA_LENGTH DATA_PRECISION DATA_SCALE
---------------- ------------------ ----------- -------------- ----------
EMPNO NUMBER 22 4 0
ENAME VARCHAR2 10
JOB VARCHAR2 9
MGR NUMBER 22 4 0
HIREDATE DATE 7
SAL NUMBER 22 7 2
COMM NUMBER 22 7 2
DEPTNO NUMBER 22 2 0
8 rows selected.例如,您可以将TABLE_NAME和COLUMN_ID添加到SELECT子句,并将WHERE子句更改为IN (....)条件;添加order by column_id,然后检查输出-列应该成组出现,首先是所有三个表中的第一列,然后是所有三个表中的第二列,依此类推。或者编写代码到count(distinct data_type)、group by column_id,并查看哪些组的计数大于1。
https://stackoverflow.com/questions/41947381
复制相似问题