Как создать динамическое представление на основе ввода от пользователя в Oracle?

#sql #oracle #plsql #oracle10g

#sql #Oracle #plsql #oracle10g

Вопрос:

Например, мне нужно создать представление для конкретного сотрудника, в котором хранится информация о посещаемости за последние 50 дней, и у меня более миллиона сотрудников.

Я буду указывать идентификатор сотрудника в качестве входных данных, и я хочу, чтобы это представление создавалось только для этого сотрудника с данными о его посещаемости за последние 50 дней.

Упрощенное объяснение будет высоко оценено.

Спасибо.

Комментарии:

1. Вместо того, чтобы создавать отдельные представления для каждого сотрудника, не могли бы вы как-то связать текущую подключенную учетную запись пользователя с идентификатором сотрудника?

Ответ №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
  
  

Убедитесь, что оба empno и date_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 проиндексировано, as to_char -ing он не сможет использовать такой индекс.

Комментарии:

1. Если я хочу получить данные за определенный месяц, предоставив входные данные, как я могу это сделать??

2. Я добавил еще немного информации; посмотрите.