我有两个由“union”连接的select语句。在执行该语句时我得到了:
错误报告: SQL错误:ORA-01790:表达式必须与相应的表达式具有相同的数据类型 01790. 00000 - “表达式必须与对应的表达式具有相同的数据类型”
也许你可以就如何诊断这个问题给我一个建议吗?
答案 0 :(得分:14)
不看你的SQL,我猜你有UNION的列有不同的数据类型。
答案 1 :(得分:10)
以下是发现的内容:
ORA-01790:表达式必须与对应表达式具有相同的数据类型
原因: SELECT列表项对应于同一集合表达式的另一个查询中具有不同数据类型的SELECT列表项。
操作:检查所有相应的SELECT列表项是否具有相同的数据类型。使用TO_NUMBER,TO_CHAR和TO_DATE函数执行显式数据转换。
我没有看到你的查询,但我猜你的联盟中的一个选择不是选择与另一个相同的列。
答案 2 :(得分:3)
错误告诉您正在联合具有不同数据类型的列。有一些oracle函数会将一种类型转换为另一种类型(例如“to_char”),您必须将数据类型转换为通用格式,或者至少将一种转换为另一种格式。如果你发布实际的查询/类型,它可能更具体。
答案 3 :(得分:2)
您需要确保联合中的相应列具有相同的数据类型。最简单的方法是逐列注释列以缩小到列,然后在其中一列中使用显式类型转换函数来使类型匹配。
答案 4 :(得分:2)
显然海报的问题已经解决了半年多,但是我想向任何阅读这篇文章的人寻求帮助,指出所选属性(列)的顺序必须从一个联合语句到下一个。仅仅让名称和数据类型匹配是不够的,尽管这在某种意义上是根本原因。但是由于在Oracle中处理Union语句的方式,由于列的排序不匹配,可能会出现ORA-01790错误。
在我的情况下,我有一个UNION ALL的两个选择查询。一个选择有一个名为" generic_column_name"作为select中的第25个项目,另一个select具有名为" generic_column_name"相同的数据类型(我通过硬编码和使用强制数据类型转换测试了几种方法)。然而,第二个选择在第19位有这个项目,所以从那里的所有列都是偏移的,这触发了ORA-01790错误。
答案 5 :(得分:1)
您尝试执行SELECT语句(可能是UNION或UNION ALL),并且所有查询在结果列中都不包含匹配的数据类型。
答案 6 :(得分:1)
正如我在问题中提到的,我想就如何解决问题提出建议。 我所做的是在每个select语句中一次启用一列,发现我在SQL UNION的最后一列不匹配。非常感谢参与和帮助我,但我知道我的类型不匹配,我不知道的是如何排除故障。
答案 7 :(得分:0)
我今天遇到了同样的问题。问题出在union
中,基本上按列顺序