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