oracle - 尝试使用 ORACLE 获取工作日列表时出现 ORA-00904
问题描述
在我的项目中,我需要使用一个名为getWorkingDay(beg_date Date,slider Integer)
. 此函数用于查找从日期开始的第 n 个最后一个工作日beg_date
(其中“n”是 的值slider
)。我想做的是让所有工作日都在 and 定义的日期范围beg_date
内end_date
。我想使用 SELECT 语句和上面的函数来获取工作日列表。beg_date=sysdate-45
我用and尝试了这个语句end_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: "幻灯片": 无效的标识符
你能帮我找到解决这个问题的方法吗?
解决方案
您的函数 ,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 问题显示了如何实现这一目标:
调整该 SO 问题的答案以及您的问题中的示例,我相信类似以下的内容应该有效。
SELECT getWorkingDays(sysdate - (45 - LEVEL), 1)
FROM DUAL
CONNECT BY LEVEL <= 45
当然我不能真正测试它,因为我没有 function 的代码getWorkingdays()
。
推荐阅读
- sql-server - 尝试使用 Oracle Connection Attunity 运行 SSIS 包时出现问题
- java - 等到检索到 Firestore 数据
- ios - AudioKit.renderToFile AKClipPlayer 同步问题。渲染文件与第一个剪辑位置不同步并且也被截断
- node.js - Firestore 事务在重试时是否使用退避逻辑(线性或指数)?
- angular - 用于生产构建的 Angular Ivy 编译器错误
- python - 在数据框中更改逗号分隔的日期格式 20,190,927?
- scala - 为 apache phoenix 导入 sbt 项目时出错
- typescript - Vary function overload based on generic type
- asp.net-core - 如何在 asp.net core web api 的控制器中使用模型绑定排除属性
- python-3.x - 当我在 Python3 中使用默认获取时,如何获得预期的 str 实例,NoneType 发现错误?