在UNION ALL中为某些列选择硬编码值时出现Oracle错误923

时间:2017-05-11 06:31:22

标签: oracle self-join union-all

我在尝试检索作为UNION ALL查询一部分的子查询之一中的硬编码值('')时面临oracle错误00923。

select p.owner,
       p.exception_id,
       p.status,
       p.product_id,
       p.event_id
from exception p, exception c
where c.Parent_Id  = p.Exception_Id
   AND c.Owner_COID = p.Owner_COID
UNION ALL
select p.owner,
       p.exception_id,
       p.status,
       '',
        ''
from exception  p
and not exists (select * from bb_Exception c 
                 WHERE c.Parent_Id = p.Exception_Id);

有人可以帮我解决这个问题吗?

由于

1 个答案:

答案 0 :(得分:0)

UNION ALL的后半部分没有WHERE子句!

from exception  p
and not exists (select * from b

应该是

from exception  p
where not exists (select * from b

修复后,如果p.product_idp.event_id是数字(如ID所预期的那样),那么您应该得到以下异常:

ORA-01790: expression must have same datatype as corresponding expression

使用null而不是空字符串的解决方案。 Oracle将它们视为等效,但''是varchar2数据类型而null不是。