当我试图用ORACLE获取工作日列表时,我得到了ORA-00904。

问题描述 投票:0回答:1

在我的项目中,我需要使用一个叫做 getWorkingDay(beg_date Date,slider Integer). 这个函数用于查找从日期开始的第n个工作日。beg_date (其中 "n "是来自 slider).我想做的是得到在一个由 beg_dateend_date. 我想使用一个SELECT语句和上面的函数来获得工作日列表.我尝试了这个语句与 beg_date=sysdate-45end_date=sysdate :

SELECT * FROM(
SELECT getworkingDay(sysdate,slide) dt FROM DUAL
WHERE slide>0 and slide<=sysdate-(sysdate-45))
WHERE dt >=sysdate-45

我得到了以下错误信息:

ORA-00904:"SLIDE":无效标识符。

你能帮我找到解决这个问题的方法吗?

oracle select plsql ora-00904
1个回答
1
投票

你的函数。getWorkingDays只适用于一个单一的日期。如果你想让它适用于一系列的日期,那么你需要为日期范围内的每一天调用一次。以你的问题为例。sysdate - 45意思是你需要调用它45次,如

select getWorkingDays(sysdate - 45, 1) from dual
union
select getWorkingDays(sysdate - 44, 1) from dual
union
select getWorkingDays(sysdate - 43, 1) from dual

我希望你能明白我的意思。我把你的变量1(一)替换成了 slider. 你需要把它定义为一个变量。你声称你使用的是 SQL开发人员 所以我建议你参考该产品的文档,看看如何定义变量。

另外,你也可以写一个SQL查询,准确地返回45行(同样是45行,因为你在问题中使用的就是这个例子)。我相信下面的SO问题展示了如何实现这一点。

SQL查询,从双重数据中返回N条记录。

根据那个SO问题的答案,以及你问题中的例子,我相信类似下面的东西应该是可行的。

SELECT getWorkingDays(sysdate - (45 - LEVEL), 1)
  FROM DUAL
CONNECT BY LEVEL <= 45

当然,我无法真正测试它,因为我没有函数 getWorkingdays().


0
投票

没有列名,因为滑动的双。你需要从你的表中选择,其中包括 slide 专栏

© www.soinside.com 2019 - 2024. All rights reserved.