我有一个带有UNION ALL语句的查询。
SELECT * FROM HULL_A
UNION ALL
SELECT * FROM HULL_B;
它引发错误
ORA-01790“表达式必须具有与相应的数据类型相同的数据类型 表达式”
但是,我检查了一下,但事实并非如此。我用以下方法检查:
select db1.data_type, db2.data_type, db1.data_length, db2.data_length, db1.data_precision, db2.data_precision, db1.data_scale, db2.data_scale
from all_tab_columns db1
inner join all_tab_columns db2
on (db1.owner = db2.owner
and db1.column_name = db2.column_name)
where db1.table_name = 'HULL_A'
and db2.table_name = 'HULL_B'
and (
db1.data_type = db2.data_type
OR
db1.data_length = db2.data_length
)
我能够使用UNION ALL将HULL_A链接到HULL_C和HULL_D。
那么ORACLE为什么抛出错误?为了能够执行UNION ALL,我还可以执行其他哪些测试?
我正在使用WINDOWS 10 ORACLE 11g
答案 0 :(得分:1)
两个表中的列必须具有相同的数据类型,并且列的顺序必须相同。
您可以尝试使用以下查询来识别两个表的列中的不匹配项:
SELECT
A.COLUMN_ID COLUMN_HULL_A,
A.DATA_TYPE DATA_TYPE_HULL_A,
B.COLUMN_ID COLUMN_HULL_B,
B.DATA_TYPE DATA_TYPE_HULL_B
FROM
(
SELECT
COLUMN_ID,
DATA_TYPE
FROM
USER_TAB_COLUMNS
WHERE
TABLE_NAME = 'HULL_A'
) A
FULL OUTER JOIN (
SELECT
COLUMN_ID,
DATA_TYPE
FROM
USER_TAB_COLUMNS
WHERE
TABLE_NAME = 'HULL_B'
)B ON (A.COLUMN_ID = B.COLUMN_ID AND A.DATA_TYPE = B.DATA_TYPE)
WHERE
A.COLUMN_ID IS NULL
OR B.COLUMN_ID IS NULL;
干杯!