CftClub.ru
Клуб специалистов ЦФТ-Банк

Динамический фильтр в представлении

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
nOnAME
Участник со стажем


Вступление в Клуб: 25.01.2011
СообщениеВт Май 31, 2011 08:47   Динамический фильтр в представлении Ответить с цитатой
Полезность: Нет оценки
Доброго времени суток.
Допустим есть задача открывать одно и тоже представление для разных пользователей по разному, в зависимости от уровня доступа. Представление написано на PL Plus. Обычный where не устраивает, т.к. проверка на админа идет по имени, а выборка должна идти по подразделениям. Т.е. для обычного пользователя берется его подразделение и выводятся данные только по его подразделению, а вот для админа хочется чтобы выводились данные по всем подразделениям. Соответстаенно при where надо делать либо внутренний select, либо создавать массив.
В примерах дестрибутивных представлений нашел такую вещь как pragma, которая позволяет в зависимость от условий "pragma IF_DEF" осуществлять ту или иную выборку. Вот собственно проблема в следующем:
1. Объявляю переменную (pragma Define(переменная));
2. Это объявление привязываю к условию по имени пользователя в процедуре.
3. В Pl-Plus представлении пишу pragma include(имя процедуры).
4. В этом же представлении пишу pragma IF_DEF(переменная) и дальше один код для select
5. Еще один pragma If_Def и второй код для select (когда переменная не была объявлена).

В результате получаю что переменная объявлена всегда и запрос выполняется один и тот же.
Собственно, если кто может помочь в этом деле милости просим.
ggrey
Участник со стажем


Вступление в Клуб: 01.10.2007
СообщениеВт Май 31, 2011 09:19    Ответить с цитатой
Полезность: 1
1. pragma DEFINE, IF_DEF и т.д. работают на этапе компиляции, т.е. вам не подходят.
2. Из вашего описания мне кажется что можно написать следующий where:
where (ИМЯ_ПОЛЬЗОВАТЕЛЯ <> АДМИН and ПОДРАЗДЕЛЕНИЕ_ПОЛЬЗОВАТЕЛЯ = ПОДРАЗДЕЛЕНИЕ) or ИМЯ_ПОЛЬЗОВАТЕЛЯ = АДМИН
r00st
Эксперт


Вступление в Клуб: 14.09.2007
СообщениеВт Май 31, 2011 09:25    Ответить с цитатой
Полезность: Нет оценки
Доступ по реквизиту (если применимо).
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеВт Май 31, 2011 10:17    Ответить с цитатой
Полезность: Нет оценки
Вот чего я не пойму, так это почему нельзя выбрать данные по stdlib.userid? Там и доступ можно ограничить в том же Where по филиалу(подразделению) и админа исключить.
_________________
всегда есть как минимум 2 выхода
nOnAME
Участник со стажем


Вступление в Клуб: 25.01.2011
СообщениеВт Май 31, 2011 10:29    Ответить с цитатой
Полезность: Нет оценки
Всем спасибо, просто думал как то через прагму сделать, но раз нельзя, значит будет where Smile
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru