Указания компилятору при создании подпрограмм — КиберПедия 

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Указания компилятору при создании подпрограмм

2022-12-20 16
Указания компилятору при создании подпрограмм 0.00 из 5.00 0 оценок
Заказать работу

Следующие указания могут использоваться в предложениях 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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.008 с.