История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Топ:
Определение места расположения распределительного центра: Фирма реализует продукцию на рынках сбыта и имеет постоянных поставщиков в разных регионах. Увеличение объема продаж...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Интересное:
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Следующие указания могут использоваться в предложениях CREATE PROCEDURE и CREATE FUNCTION (версия 8.1):
OR REPLACE
Если подпрограмма уже существует, она будет перетранслирована с сохранением имеющихся свойств
AUTHID
Указывает на то, будет ли выполнение подпрограммы осуществляться с правами пользователя, подпрограмму создавшего (DEFINER), или пользователя, к программе обратившегося (CURRENT_USER). До версии Oracle 8.1 последним качеством обладали лишь подпрограммы из системных пакетов DBMS_SQL и DBMS_UTILITY. Пример использования указания см. ниже.
DETERMINISTIC
Сообщает компилятору, что значение функции определяется исключительно значениями ее параметров (то в теле не используются обращения к глобальным переменным пакета или к полям базы данных). В этом случае PL/SQL-машина может оптимизировать вычисление функции при повторяющихся вызовах, подменяя собственно вычисление обращениями к ранее вычисленным значениям, хранимым в пределах сеанса. Обязательный (а не оптимизационный) характер указание DETERMINISTIC имеет для возможности функции быть использованой в выражении для индекса, построенного на функции (function-based index) или же в SQL-формулировке материализованной выводимой таблицы, созданной в режимах REFRESH FAST или ENABLE QUERY REWRITE.
PARALLEL_ENABLED
Подсказка оптимизатору, что вычисление функции, если она вызвана в теле запроса SQL, может быть распараллелено в случае использования параллельной обработки запросов, то есть в ней нет обращений к переменным сеанса (например, глобальным переменным пакета).
PIPELINED
Может использоваться для описания табличной функции, то есть функции, принимающей на входе набор строк и выдающей в качестве результата тоже набор. Если такая функция странслирована с указанием PIPELINED, результат начинает выдаваться построчно по мере формирования в теле функции, а не после полного подсчета всего набора строк. При этом в теле функции строки созвращаются индивидуально оператором PIPE ROW имя_записи, а не RETURN результат, как обычно. Действует с версии 9. Примеры см. ниже.
AGGREGATE
Используется для написания собственных обобщающих (агрегатных) функций (вдобавок к стандартным MIN, MAX и т. д.). Действует с версии 9.
Хранимые подпрограммы и привилегии доступа к данным в БД
Две логики реализации привилегий доступа к данным БД
Задаются указанием AUTHID DEFINER, либо AUTHID CURRENT_USER. Содержательный пример использования логики «права доступа соответствуют правам обратившегося к подпрограмме»:
CREATE OR REPLACE FUNCTION countme (tabula IN VARCHAR2) RETURN NUMBER
AUTHID CURRENT_USER
AS
cnt NUMBER;
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT (*) FROM ' || tabula INTO cnt;
RETURN cnt;
END;
/
Упражнение. Создать функцию COUNTME как описано выше и проверить в работе из «своей» и «чужой» схемах. Заменить AUTHID CURRENT_USER на AUTHID DEFINER и повторить опыт.
Содержательный пример использования логики «права доступа соответствуют правам создателя подпрограммы» для получения полного имени трассировочного файла текущего сеанса:
CREATE OR REPLACE FUNCTION trace_file_name RETURN VARCHAR2 AUTHID DEFINER
IS
fname VARCHAR2(256);
BEGIN
SELECT param.value || '\' || i.instance_name || '_ora_' || p.spid || '.trc' INTO fname
FROM v$parameter param, v$instance i, v$process p, v$session s
WHERE s.sid = (SELECT sid FROM v$mystat WHERE ROWNUM = 1)
AND s.paddr = p.addr
AND param.name = 'user_dump_dest';
RETURN fname;
END;
/
(Здесь для пути к файлу употреблен разделитель файловой системы Windows).
Упражнение. Создать процедуру от имени SYSTEM (или SYS). Выдать в SQL*Plus:
GRANT EXECUTE ON trace_file_name TO PUBLIC;
CREATE PUBLIC SYNONYM trace_file_name FOR trace_file_name;
Проверить работу функции, включая для этого трассировку разных сеансов.
Обратите внимание, что «права создателя» дают возможность разрешать пользователям работать с таблицами БД, не предоставляя непосредственных привилегий доступа к ним. Таким образом они дают еще одну возможность регламентировать доступ к таблицам в БД в дополнение, например, к механизму views.
|
|
|
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!