Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Топ:
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Интересное:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Инженерная защита территорий, зданий и сооружений от опасных геологических процессов: Изучение оползневых явлений, оценка устойчивости склонов и проектирование противооползневых сооружений — актуальнейшие задачи, стоящие перед отечественными...
Дисциплины:
2022-12-20 | 20 |
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-предложения имеют свои особенности. Более предметно будут рассмотрены после темы «Коллекции».
|
|
|
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!