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

时间:2020-09-03 12:27:03

标签: sql oracle plsql oracle10g

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

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

简单的解释将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:1)

视图只是存储的查询。因此,如果您始终只需要最近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-将无法使用这样的索引。