Sql 如何基于Oracle中用户的输入创建动态视图?
例如,我必须为某个特定员工创建一个视图,该视图存储过去50天的考勤信息,并且我有超过百万的员工 我将提供员工id作为输入,我希望仅为该员工创建此视图,并显示其最近50天的考勤详细信息 一个简单的解释将是非常感激的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天,那么
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吗?如果我想通过提供输入来获取特定月份的信息,我该如何做?我添加了更多信息;看一看。