【发布时间】:2019-06-25 12:23:52
【问题描述】:
我有一个关于 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
【问题讨论】:
-
Oracle 不允许混合数据类型是有充分理由的,因为 ANSI/ISO SQL 标准严格禁止混合数据类型。见demo
-
“但是,我检查过,我认为情况并非如此。” 计算机/软件不会撒谎或给出无效的错误信息..
-
另请参阅Why should I provide a Minimal Reproducible Example for a very simple SQL query? 以提供更好的示例数据和预期结果
-
JOIN 不是由 COLUMN_NAME 完成的,而是由基于 COLUMN_ID 的位置完成的,也许有人添加或删除了列?最好使用限定名称而不是 *...
-
为什么会报错?因为列之间的数据类型不匹配。也许两个表中列的顺序不同(列是按 UNION 中的位置而不是名称匹配的),或者这两个表对于“相同”列的类型确实不同。请edit您的问题(点击下方的edit 链接)并将两个表格的
create table语句添加为formatted text