如何基于Oracle用户的输入来创建动态视图?

问题描述

例如,我必须为特定员工创建一个视图,该视图存储最近50天的出勤信息,而我的员工人数超过了

我将输入员工ID作为输入,并且我希望仅为该员工及其出勤详细信息的最后50天创建此视图。

简单的解释将不胜感激。

谢谢。

解决方法

视图只是存储的查询。因此,如果您始终只需要最近50天,那么

create or replace view v_50 as
select empno,ename,date_in,date_out
from attendance
where date_in >= trunc(sysdate) - 50

然后为您需要的任何员工获取数据:

select *
from v_50
where empno = 1234;

另一方面,您根本不需要视图-在原始表中执行相同操作:

select empno,date_out
from attendance
where empno = 1234
  and date_in >= trunc(sysdate) - 50
  

确保empnodate_in都已建立索引,并定期收集统计信息。


要检索特定月份的数据,一种选择是

select ...
from attendance
where to_char(date_in,'yyyymm') = '202009'

基于函数的索引会有所帮助;否则,您将不得不使用类似

where date_in between date '2020-09-01' and date '2020-03-30'

如果date_in被编入索引,则to_char-将无法使用这样的索引。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...