如何根据 Oracle 中用户的输入创建动态视图?

Posted

技术标签:

【中文标题】如何根据 Oracle 中用户的输入创建动态视图?【英文标题】:How to create a dynamic view based on the input from a user in Oracle? 【发布时间】:2020-09-03 12:27:03 【问题描述】:

例如,我必须为特定员工创建一个视图,该视图存储过去 50 天的出勤信息,而我有超过一百万的员工。

我将提供员工 ID 作为输入,并且我希望仅为该员工创建此视图,其中包含他最近 50 天的出勤详细信息。

我们将不胜感激。

谢谢。

【问题讨论】:

不是为每个员工创建单独的视图,您不能以某种方式将当前连接的用户帐户链接到员工 ID 吗? 【参考方案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-ing 它将无法使用这样的索引。

【讨论】:

如果我想通过输入获取特定月份的数据,我该怎么做?? 我添加了更多信息;看看吧。

以上是关于如何根据 Oracle 中用户的输入创建动态视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据用户查询数据在视图中设置动态“位置”?

在数据库视图中应用动态 where 条件(oracle - 12c,mysql 5+)

如何从动态创建的表格视图单元格的输入字段中将数据检索到数组

如何根据用户输入创建动态 CSS

如何根据用户输入创建动态变化的对话框 Visual Studio 2010 (mfc)

如何根据表单输入添加动态复选框?