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

Sql 如何基于Oracle中用户的输入创建动态视图?,sql,oracle,plsql,oracle10g,Sql,Oracle,Plsql,Oracle10g,例如,我必须为某个特定员工创建一个视图,该视图存储过去50天的考勤信息,并且我有超过百万的员工 我将提供员工id作为输入,我希望仅为该员工创建此视图,并显示其最近50天的考勤详细信息 一个简单的解释将是非常感激的 谢谢。视图只是一个存储的查询。因此,如果你总是只需要最后50天,那么 create or replace view v_50 as select empno, ename, date_in, date_out from attendance where date_in >= tr

例如,我必须为某个特定员工创建一个视图,该视图存储过去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
  
确保中的
empno
date\u都已编制索引,并定期收集统计数据


要检索特定月份的数据,一个选项是

select ...
from attendance
where to_char(date_in, 'yyyymm') = '202009'
基于函数的索引将有所帮助;否则,您必须使用

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

如果
中的
date\u被索引,作为
到\u char
-ing,它将无法使用这样的索引。

不是为每个员工创建单独的视图,你不能以某种方式将当前连接的用户帐户链接到员工ID吗?如果我想通过提供输入来获取特定月份的信息,我该如何做?我添加了更多信息;看一看。