Обращение в SQL к функциям из состава пакетов — КиберПедия 

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Обращение в SQL к функциям из состава пакетов

2022-12-20 20
Обращение в SQL к функциям из состава пакетов 0.00 из 5.00 0 оценок
Заказать работу

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

0.012 с.