Для функций существуют четыре различных уровня строгости. строгости (purity level) определяет структуры данных, которые может считывать или модифицировать функция. Эти уровни представлены в таблице 10.2. В зависимости от уровня строгости функции на нее налагаются следующие ограничения:
• Функция, вызываемая из SQL-оператора, не может модифицировать таблицы базы данных (WNDS). (В Огас1е8г функция, вызываемая из оператора, отличного от SELECT, может модифицировать таблицы базы данных; см. ниже раздел "Вызов хранимых функций H3SQLBOracle8f.)
Для того чтобы функция могла быть выполнена дистанционно (с помощью соединения баз данных) или параллельно, она не должна считывать или записывать значения модульных переменных.
Функции, вызываемые из предложений SELECT, VALUES или SET, могут записывать модульные переменные. Функции во всех остальных предложениях должны иметь уровень строгости WNPS.
Функция строга настолько, насколько строги вызываемые ею подпрограммы. Если функция вызывает хранимую процедуру, которая, к примеру, обновляет информацию (оператор UPDATE), то эта функция не имеет уровня строгости и, следовательно, не может быть использована в операторе SELECT.
• Независимо от уровня строгости хранимые функции PL/SQL нельзя вызывать из предложения ограничения CHECK команды CREATE TABLE или ALTER TABLE, а также использовать для указания значения по умолчанию для столбца, так как в этих ситуациях требуется, чтобы определения не изменялись.
кроме приведенных ограничений, функция, созданная пользователем, должна отвечать также дополнительным требованиям, чтобы ее можно было вызывать из SQL-операторов. Заметим, что все встроенные
функции тоже должны отвечать этим требованиям.
• Функция должна храниться в базе данных автономно или как часть модуля. Она не должна быть локальной по отношению к другому блоку.
• Функция может принимать только параметры IN, но не IN OUT или OUT.
Для формальных параметров должны использоваться только те типы, которые применяются в базе данных, но не типы PL/SQL, такие как BOOLEAN или RECORD. Типы базы данных — это NUMBER, CHAR, VARCHAR2, ROWID, LONG, RAW, LONG RAW и DATE, а также новые типы Огас1е8г'и Огас1е9г.
Тип, возвращаемый функцией, также должен быть типом базы данных.
Функция не должна заканчивать текущую транзакцию оператором COMMIT или ROLLBACK, либо выполнять откат к точке сохранения до своего выполнения.
В функции не должны вызываться команды ALTER SESSION и ALTER SYSTEM.
В качестве примера рассмотрим функцию входным пара-
метром которой является идентификатор студента и которая возвращает конкатенированные имя и фамилию.
Функция FullName удовлетворяет всем ограничениям, поэтому ее можно вызвать из SQL-оператора:
< Предыдущая | Следующая > |
---|