История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
Топ:
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 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-предложения имеют свои особенности. Более предметно будут рассмотрены после темы «Коллекции».
|
|
|
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!