Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Топ:
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Интересное:
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Дисциплины:
2022-12-20 | 16 |
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.
|
|
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!