如何在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, ename, date_in, 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一样,它将无法使用这样的索引。

最新更新