#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. Я добавил еще немного информации; посмотрите.