如何根据 Oracle 中用户的输入创建动态视图?
How to create a dynamic view based on the input from a user in 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;
另一方面,您根本不需要视图 - 从原来的 table:
做同样的事情
select empno, ename, date_in, date_out
from attendance
where empno = 1234
and date_in >= trunc(sysdate) - 50
确保 empno
和 date_in
都被索引,定期收集统计信息。
要检索特定月份的数据,一种选择是
select ...
from attendance
where to_char(date_in, 'yyyymm') = '202009'
一个function-based索引会有所帮助;否则,你必须使用类似
的东西
where date_in between date '2020-09-01' and date '2020-03-30'
如果 date_in
被索引,因为 to_char
-ing 它将无法使用这样的索引。
例如,我必须为特定员工创建一个视图,该视图存储过去 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;
另一方面,您根本不需要视图 - 从原来的 table:
做同样的事情select empno, ename, date_in, date_out
from attendance
where empno = 1234
and date_in >= trunc(sysdate) - 50
确保 empno
和 date_in
都被索引,定期收集统计信息。
要检索特定月份的数据,一种选择是
select ...
from attendance
where to_char(date_in, 'yyyymm') = '202009'
一个function-based索引会有所帮助;否则,你必须使用类似
的东西where date_in between date '2020-09-01' and date '2020-03-30'
如果 date_in
被索引,因为 to_char
-ing 它将无法使用这样的索引。