如何解决Oracle错误ORA-01790?

时间:2009-12-07 21:42:24

标签: sql oracle oracle10g oracle11g ora-01790

我有两个由“union”连接的select语句。在执行该语句时我得到了:

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

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

8 个答案:

答案 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),并且所有查询在结果列中都不包含匹配的数据类型。

Techonthenet - ORA-01790

答案 6 :(得分:1)

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

答案 7 :(得分:0)

我今天遇到了同样的问题。问题出在union中,基本上按列顺序