如何解决Oracle错误ORA-01790?

Rom*_*gan 5 sql oracle oracle10g oracle11g ora-01790

我有两个由"union"连接的select语句.在执行该声明时,我得到了:

错误报告:SQL错误:ORA-01790:表达式必须与对应的表达式01790具有相同的数据类型.00000 - "表达式必须与对应的表达式具有相同的数据类型"

也许你可以就如何诊断这个问题给我一个建议?

Otá*_*cio 15

不看你的SQL,我猜你有UNION的列有不同的数据类型.


Fru*_*ner 10

这是找到的:

ORA-01790: 表达式必须与相应的表达式具有相同的数据类型

原因: SELECT列表项对应于同一集表达式的另一个查询中具有不同数据类型的SELECT列表项.

操作:检查所有相应的SELECT列表项是否具有相同的数据类型.使用TO_NUMBER,TO_CHAR和TO_DATE函数执行显式数据转换.

我没有看到你的查询,但我猜你的联盟中的一个选择不是选择与另一个相同的列.


mar*_*acw 6

很明显,海报的问题在 50 多年前就已经解决了,尽管如此,我还是想向任何阅读这篇文章以寻求帮助的人指出,所选属性(列)的顺序必须从一个联合语句到下一个匹配。仅仅让名称和数据类型匹配是不够的,尽管这在某种意义上是根本原因。但是由于在 Oracle 中处理 Union 语句的方式,可能会由于列的顺序不匹配而出现 ORA-01790 错误。

就我而言,我有一个带有两个选择的 UNION ALL 的查询。一个选择有一个名为“generic_column_name”的列作为选择中的第 25 项,另一个选择有一个名为“generic_column_name”的相同数据类型的列(我通过硬编码测试了几种方法,也使用强制数据类型转换)。然而,第二个选择在第 19 位有这个项目,所以从那里开始的所有列都被偏移,这触发了 ORA-01790 错误。


Rom*_*gan 4

正如我在问题中提到的,我想获得有关如何解决我的问题的建议。我所做的就是在每个 select 语句中一次启用一列,并发现 SQL UNION 的最后一列不匹配。非常感谢您的参与和帮助,但我知道我的类型不匹配,我不知道如何排除故障。