Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Топ:
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Интересное:
Инженерная защита территорий, зданий и сооружений от опасных геологических процессов: Изучение оползневых явлений, оценка устойчивости склонов и проектирование противооползневых сооружений — актуальнейшие задачи, стоящие перед отечественными...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Дисциплины:
2022-12-20 | 18 |
5.00
из
|
Заказать работу |
|
|
Для версий Oracle 8.0 и предшествующих хранимые функции, принадлежащие пакетам, должны иметь в своем описании явное указание качества изменений (purity level), определяемого для функции. Начиная с версии 8.1, если такое указание отсутствует, оно будет проверяться PL/SQL-машиной автоматически во время выполнения программы или же их могут восполнять другие указания типа DETERMINISTIC или PARALLEL_ENABLED.
Синтаксис указания качества изменений в пакетной функции:
PRAGMA RESTRICT_REFERENCES (имя_программы | DEFAULT, качество_изменений);
Ключевое слово DEFAULT распространяет указываемый уровень качества изменений на все программы в пакете или все методы объектных типов.
Каждый из пяти имеющихся уровней качества изменений характеризует определенную степень свободы подпрограммы от побочных эффектов:
Purity level | Описание | Степень ограничения в программном коде |
WNDS | Write No Database State | Отсутствуют операции INSERT, UPDATE, DELETE |
RNDS | Read No Database State | Отсутствуют операции SELECT |
WNPS | Write No Package State | Не делаются изменения переменных пакета |
RNPS | Read No Package State | Отсутствуют обращения к переменным пакета |
TRUST | Сообщение компилятору “поверить” продекларированному уровню качаства изменений “на слово” и не отрабатывать специальных действий, ограждающих от побочных эффектов |
(Уровень TRUST имеется только начиная с версии 8.1).
Для разных мест использования в SQL пакетной функции требуется иметь различный минимальный уровень качества производимых изменений:
- для использования в SQL-предложениях вообще, все хранимые функции должны быть странслированы с указанием WNDS
- все функции, используемые не в SELECT, VALUES или SET, должны быть странслированы с указанием WNPS
|
- чтобы иметь возможность быть вызванной с удаленного сервера, функция должна быть странслирована с указанием RNPS
- чтобы иметь возможность быть обработанной параллельно, функция должна быть странслирована с указанием одновременно четырех главных уровней (WNDS, RNDS, WNPS, RNPS) или PARALLEL_ENABLED (в Oracle 8.1)
- функция не должна обращаться к подпрограммам, имеющим более низкий уровень качества изменений
- в Oracle 7 в случае, если пакет содержит раздел инициализации, он также должен быть помечен определенным уровнем качества изменений
- подменяемые (overloaded) функции не обязаны иметь одинаковый уровень качества изменений, но должны иметь его (возможно, каждая – свой) все из них
Не все системные пакеты в Oracle имеют продекларированный уровень WNPS или RNPS (например, пакеты DBMS_OUTPUT, DBMS_PIPE, DBMS_SQL), и поэтому использование подпрограмм из них в SQL имеет свои ограничения.
Разрешение конфликта имен столбцов и функций
Если функция без параметров и ее имя совпадает с именем столбца, конфликт имен в SQL-предложениии будет разрешен в пользу столбца. Для того, чтобы поменять решение Oracle в пользу функции, достаточно уточнить ее имя именем схемы, например:
CREATE FUNCTION ename RETURN VARCHAR2 AS BEGIN RETURN ‘I am a function’; END;
/
-- прочитается как имя столбца:
SELECT ename FROM emp;
-- прочитается как имя функции:
SELECT scott.ename FROM emp;
К сожалению допускается конфликт между именами отдельно странслированной функцией и пакетированной. Он разрешается в пользу пакетированной:
CREATE OR REPLACE PACKAGE scott IS FUNCTION ename RETURN varchar2; END scott;
/
CREATE OR REPLACE PACKAGE BODY scott IS
FUNCTION ename RETURN varchar2 IS BEGIN RETURN 'I am a package function'; END ename;
END scott;
/
-- теперь прочитается как имя пакетированной функции:
SELECT scott.ename FROM DUAL;
В отдельных случаях замаскировать самостоятельную функцию ENAME можно и не создавая пакета:
DROP PACKAGE scott;
CREATE TABLE scott AS SELECT * FROM emp;
-- функция ENAME снова не видна:
SELECT scott.ename FROM scott;
Табличные функции в SQL
Табличными в PL/SQL называются функции, принимающие в качестве аргумента коллекции и/или возвращающие коллекции. Их определение и способ обращения к ним из SQL-предложения имеют свои особенности. Более предметно будут рассмотрены после темы «Коллекции».
|
|
|
Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!