【发布时间】:2015-02-09 15:55:58
【问题描述】:
我正在尝试在 Oracle 中执行此 SQL:
select z.*
from (select (CASE
WHEN trunc(to_date('01.02.2015', 'DD.MM.YY'), 'MM') =
to_date('01.02.2015', 'DD.MM.YY') THEN
trunc(ADD_MONTHS(sysdate, -1), 'MM')
ELSE
trunc(sysdate - 1)
END) as sd,
trunc(sysdate) ed
from dual) t,
(SELECT *
FROM table(SOMEOWNERUSER.SOMEPACKAGE.getPipelinedTable(to_char(t.sd,
'dd.mm.yyyy'),
to_char(t.ed,
'dd.mm.yyyy')))) z
但我收到错误 ORA-00904: "T"."SD": invalid identifier。我做错了什么?
【问题讨论】:
-
尝试摆脱整个查询
from dual。只需在getPipelinedTable调用中使用 case 表达式。您不能以这种方式跨查询引用列。 SQL Server 有cross apply,但我不知道Oracle 是否有等价物。我不认为你需要它。如果这不起作用,您可能只需要使用要传递的参数初始化一些变量。 -
您在第二个子查询中对列 t.sd 和 t.ed 的引用导致错误。您需要将您的第二个子查询与 t 的结果相关联。
标签: sql oracle nested ora-00904