Oracle - технологии создания распределенных информационных систем
Другие функции
Функция |
Возвращаемое значение |
DECODE (expr, search1, return1, [search2, return2, ]...[default]) |
Если expr равно search, возвращается соответствующий результат return. Если совпадающей пары не найдено, возвращается default. |
DUMP(expr[, return_format [, start_position[, length]]]) |
Expr во внутреннем формате Oracle |
GREATEST(expr[, expr]...) |
Наибольшее значение expr |
LEAST(expr[, expr]...) |
Наименьшее значение expr |
NVL(expr1, expr2) |
Возвращает expr2, если expr1 имеет пустое значение, в противном случае возвращает expr1. |
UID |
Целое число, которое уникально идентифицирует текущего пользователя. |
USER |
Имя текущего пользователя ORACLE. |
USERENV(option) |
Возвращает информацию о текущем сеансе. Аргументы помещаются в одиночных кавычках. Аргументы: ENTRYID, SESSIONSID, TERMINAL, LANGUAGE или LABEL. |
VSIZE(expr) |
Длина в байтах внутреннего проедставления для expr. |
Подведем некоторые итоги: гибкость СУБД Oracle во многом определяется тем, что отдельные блоки кода PL/SQL программ можно хранить как объекты базы данных в формате хранимых процедур, функций и пакетов. Т.е. часть кода программы храниться там, где обрабатывается !!, т.е. на сервере.
Пакет - совокупность функций и процедур, объединенных по общему функциональному признаку, в тело пакетов входят процедуры и функции.
Процедура - объект базы данных обеспечивающий выполнение конкретных действий с передаваемыми параметрами процедуры.
Функция - объект базы данных обеспечивающий выполнение конкретных действий над параметрами функции и возвращающая результат такой обработки.
Для создания функций, процедур, пакетов базы данных используются следующие команды:
CREATE FUNCTION
Создает автономную хранимую функцию.
CREATE PACKAGE
Создает спецификацию для хранимого пакета.
CREATE PACKAGE BODY
Создает тело хранимого пакета.
img src="oracle_pr77.gif" border=0 WIDTH=461 height=26>
CREATE PROCEDURE
Создает автономную хранимую процедуру
Приведем примеры реализации пакетов, функций и процедур.
/* ******Пакет обработки ошибок ********************* */ create or replace package app_err as /* Получение текста аварийного завершения */ function get_err return varchar2; /* Установка текста аварийного завершения */ procedure set_err ( error_text in varchar2); /* Установка текста аварийного завершения и само завершение */ procedure raise_err ( error_text in varchar2); end app_err; create or replace package body app_err as app_err_text varchar2(32767); /* *********************************************************** */ function get_err return varchar2 is A varchar (32767); Begin A := app_err_text; app_err_text := null; Return ( A ); End; /* *********************************************************** */ procedure set_err(error_text in varchar2) is Begin app_err_text := error_text; End; /* ************************************************************** */ procedure raise_err ( error_text in varchar2) is Begin app_err_text := error_text; raise_application_error (-20000, error_text); End; end app_err; /* ** Функция осуществляющая расшифровку пароля пользователя в БД ** */ create or replace function password return varchar2 is name varchar2(23); pass varchar2(23); begin select ORANAME, CRYPT_PASSWORD into name, pass from USERS where USER_ORANAME = user; pass := encrypt( pass, name ); return( pass ); end; /*Удаляется публичный синоним*/ drop public synonym password; /*Создается публичный синоним*/ create public synonym password for password; /* устанавливаем привелегии*/ grant all on password to admin;