Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > синтаксис view


Автор: liliputochka 13.9.2006, 18:28
Возможно ли передавать переменные в view и как (не нашла синтаксис view)? И как возможно извлекать данные из представления?

 Еще вопросик: чем отличается материализованное представление от обычного?

Автор: LSD 13.9.2006, 20:29
Цитата(liliputochka @  13.9.2006,  19:28 Найти цитируемый пост)
не нашла синтаксис view

http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_8004.htm#i2065510

Цитата(liliputochka @  13.9.2006,  19:28 Найти цитируемый пост)
И как возможно извлекать данные из представления?

Данные из view извлекаются обычным select-ом. Параметризовывать view нельзя, но к выборке из view можно применять все операции применимые к таблицам (where, join и т.д.).

Цитата(liliputochka @  13.9.2006,  19:28 Найти цитируемый пост)
Еще вопросик: чем отличается материализованное представление от обычного?

View - это просто сохраненный в БД запрос. По результату работы ничем не отличается, от результата который будет в результате выполнения запроса, на основе которого он составлен. Используется в целях безопасности: можно пользователю дать права только на view, а в самом view ограничить выборку данных с помощью клаузы where. Можно скрывать детали хранения данных в БД, т.е. есть возможность изменить структуру хранимых данных, при том, что для программы таблицы останутся неизменными.

Материализованное представление, на самом деле это таблица, которая получается на основе некого запроса, как и view. Обладает теми же свойствами, что и обычный view, кроме одного. Данные в материализованном представлении обновляются с некоторой задержкой. Поэтому при выборке данных можно не совсем актуальные данные. Зато, данные храняться в локальной таблице, и поэтому: данные всегда доступны, даже если в выборке участвуют таблицы с удаленного сервера. Если данные получаются путем сложных расчетов и агрегирования больших объемов данных, то эти вычисления производятся только один раз, при добавлении данных в материализованное представление, а не при каждом запросе как в случае с view.

Автор: liliputochka 15.9.2006, 14:10
еще вопросик : возможно ли использование представлений в процедурах и/или функциях и запись в представления в процедуре/функции?

Автор: LSD 15.9.2006, 14:18
Цитата(liliputochka @  15.9.2006,  15:10 Найти цитируемый пост)
возможно ли использование представлений в процедурах и/или функциях

Да и вообще никаких ограничений на использование view в процедурах нет.

Цитата(liliputochka @  15.9.2006,  15:10 Найти цитируемый пост)
запись в представления в процедуре/функции

Если view обновляемый, то можно.

Автор: liliputochka 15.9.2006, 14:26
Спасибо LSD! 

Автор: LSD 15.9.2006, 23:54
Заходи еще smile

Автор: Paradox 11.10.2006, 10:59
Цитата

Возможно ли передавать переменные в view и как

используйте лучше курсоры для этой задачи

насчет материализованных представлений позволю себе дополнить LSD
при создании материализованных представлений на таблицах БД, на которых строится такой view создаются логи, соответственно изменение данных в таблицах ведет дополнительные затраты на поддержку этих логов

насчет задержи в актуальности данных: в зависимости от типа materialized view вы можете выставить для него опцию refresh on commit, соответтственно данные во вью сможете увидеть тогда же, когда и в обычной таблице без задержи.


Автор: jsa 11.10.2006, 18:13
Цитата(liliputochka @ 13.9.2006,  18:28)
Возможно ли передавать переменные в view

как то не так давно, в форуме по интербейзу, если не ошибаюсь Акела, предлагал способ параметризировать вьюхи, относительно оракла можно попробовать использовать контекст сеанса, для задания параметра, но это только теория

Автор: 3x3 11.10.2006, 18:54
Цитата(jsa @ 11.10.2006,  18:13)
Цитата(liliputochka @ 13.9.2006,  18:28)
Возможно ли передавать переменные в view

как то не так давно, в форуме по интербейзу, если не ошибаюсь Акела, предлагал способ параметризировать вьюхи, относительно оракла можно попробовать использовать контекст сеанса, для задания параметра, но это только теория

Почему? И практика тоже. Я бы порекомендовал использовать для этого переменную уровня пакета. Это может быть оправданно, если реализуется политика разделения доступа, основанная не на оракловой авторизации.

Но.. Без нужды не стоит злоупореблядь такими вью.. Да и с назначалкой дескриптора доступа нужно ещё извернуться так, что бы пользователь не мог сам себе ID назначать, например не давать прямого пути её назначить, только посредством вызова процедуры, которой передаётся юзернейм и пассворд. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)