尝试使用 ORACLE 获取工作日列表时出现 ORA-00904

Posted

技术标签:

【中文标题】尝试使用 ORACLE 获取工作日列表时出现 ORA-00904【英文标题】:I got ORA-00904 when trying to get a list of working days with ORACLE 【发布时间】:2020-04-24 14:15:43 【问题描述】:

在我的项目中,我需要使用一个名为 getWorkingDay(beg_date Date,slider Integer) 的函数。此函数用于查找从日期beg_date 开始的第 n 个最后一个工作日(其中“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:“幻灯片”:无效标识符

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

【问题讨论】:

编辑您的问题并发布getworkingDay函数。 【参考方案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 Developer,所以我建议您参考该产品的文档以了解如何定义变量。

或者,您可以编写一个准确返回 45 行的 SQL 查询(同样是 45 行,因为这是您在问题中使用的示例)。我相信以下 SO 问题显示了如何实现这一目标:

SQL Query to return N rows from dual

根据该 SO 问题的答案以及您问题中的示例,我相信类似以下内容应该可行。

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

当然我不能真正测试它,因为我没有函数 getWorkingdays() 的代码。

【讨论】:

【参考方案2】:

双重中没有列名称作为幻灯片。您需要从包含slide 列的表中进行选择

【讨论】:

我需要做的是在0sysdate-(sysdate-45)之间使用带有slide参数的函数getWorkingDays 我需要查看您的函数,但哪个表有 slide 和 dt 列?您可以将 dual 更改为该表并尝试一下

以上是关于尝试使用 ORACLE 获取工作日列表时出现 ORA-00904的主要内容,如果未能解决你的问题,请参考以下文章

Python 操作Redis

python爬虫入门----- 阿里巴巴供应商爬虫

Python词典设置默认值小技巧

《python学习手册(第4版)》pdf

Django settings.py 的media路径设置

Python中的赋值,浅拷贝和深拷贝的区别