Oracle Server - полнофункциональная реляционная СУБД, которая идеально подходит для архитектур клиент/сервер и интернет/интранет. Особенности внутренней архитектуры Oracle ориентированы на обеспечение готовности, максимальной пропускной способности, безопасности и эффективного использования ресурсов.
Oracle также присущи черты, связанные с используемым языком программирования, которые способствуют ускорению разработки и улучшению эффективности серверной части приложений:
Один из основных компонентов Oracle Server - его процессор PL/SQL. (PL - Procedural Language - процедурный язык.)
PL/SQL - язык Oracle четвертого поколения, объединяющий структурированные элементы процедурного языка программирования с языком SQL, разработанный специально для организации вычислений в среде клиент/сервер. Он позволяет передать на сервер программный блок PL/SQL, содержаший логику приложения, как оператор SQL, одним запросом. Используя PL/SQL, можно значительно уменьшить объем обработки в клиентской части приложения и нагрузку на сеть. Например, может понадобиться выполнить различные наборы операторов SQL в зависимости от результата некоторого запроса. Запрос, последующие операторы SQL и операторы условного управления могут быть включены в один блок PL/SQL и пересланы серверу за одно обращение к сети.
При этом вся логика приложений делится на клиентскую и серверную части. Серверная часть может быть релаизована в виде функций, хранимых процедур и пакетов.
Функции. Часть логики приложения ориентированной на выполнение конкретного комплекса операций на сервере, результат которых возвращается в виде значения функции. Откомпилированные функции и их исходные тексты содержатся в базе данных.
Хранимые процедуры. Часть логики приложения, особенно нуждающаяся в доступе к базе данных, может храниться там, где она обрабатывается (на сервере). Хранимые процедуры не возвращают значения результата, обеспечивают удобный и эффективный механизм безопасности. Откомпилированные хранимые процедуры и их исходные тексты содержатся в базе данных.
Пакеты. Часть логики приложений: фукций и пакетов, предназначеных для решениях задач в рамках одного модуля (подсистемы) АИС.
Триггеры базы данных. Можно использовать триггеры, чтобы организовать сложный контроль целостности, выполнять протоколирование (аудит) и другие функции безопасности, реализовать в приложениях выдачу предупреждений и мониторинг.
Декларативная целостность. Ограничения активизируются сервером всякий раз, когда записи вставляются, обновляются или удаляются. В дополнение к ограничениям ссылочной целостности, которые проверяют соответствие первичного и внешнего ключей, можно также накладывать ограничения на значения, содержащиеся в столбцах таблицы. Поддержка целостности на сервере уменьшает размер кода клиентской части, необходимого для проверки допустимости данных, и увеличивает устойчивость бизнес- модели, определенной в базе данных.
Список, зарезервированных слов PL/SQL
Язык PL/SQL также включает зарезервированные слова, имеющие определенное значение в операторах PL/SQL.
ABORT |
DEFINITION |
NOT |
TADAUTH |
ACCEPT |
DELAY |
NULL |
TABLE |
ACCESS |
DELETE |
NUMBER |
TABLES |
ADD |
DELTA |
NUMBER_BASE |
TASK |
ALL |
DESC |
OF |
TERMINATE |
ALTER |
DIGITS |
ON |
THEN |
AND |
DISPOSE |
OPEN |
TO |
ANY |
DISTINCT |
OPTION |
TRUE |
ARRAY |
DO |
OR |
TYPE |
ARRAYLEN |
DROP |
ORDER |
UNION |
AS |
ELSE |
OTHERS |
UNIQUE |
ASC |
ELSIF |
OUT |
UPDATE |
ASSERT |
END |
PACKAGE |
USE |
ASSIGN |
ENTRY |
PARTITION |
VALUES |
AT |
EXCEPTION |
PCTFREE |
VARCHAR |
AUTHORIZATION |
EXCEPTION_INIT |
PRAGMA |
VARCHAR2 |
AVG |
EXISTS |
PRIOR |
VARIANCE |
BEGIN |
EXIT |
PRIVATE |
VIEW |
BETWEEN |
FALSE |
PROCEDURE |
VIEWS |
BODY |
FETCH |
PUBLIC |
WHEN |
BOOLEAN |
FOR |
RAISE |
WHERE |
BY |
FORM |
RANGE |
WHILE |
CASE |
FROM |
REAL |
WITH |
CHAR |
FUNCTION |
RECORD |
WORK |
CHAR_BASE |
GENERIC |
RELEASE |
XOR |
CHECK |
GOTO |
REM |
|
CLOSE |
GRANT |
RENAME |
|
CLUSTER |
GROUP |
RESOURCE |
|
CLUSTERS |
HAVING |
RETURN |
|
COLAUTH |
IDENTIFIED |
REVERSE |
|
COLUMNS |
IF |
REVOKE |
|
COMMIT |
IN |
ROLLBACK |
|
COMPRESS |
INDEX |
ROWNUM |
|
CONNECT |
INDEXES |
ROWTYPE |
|
CONSTANT |
INDICATOR |
RUN |
|
COUNT |
INSERT |
SAVEPOINT |
|
CRASH |
INTEGER |
SCHEMA |
|
CREATE |
INTERSECT |
SELECT |
|
CURRENT |
INTO |
SEPARATE |
|
CURSOR |
IS |
SET |
|
DATABASE |
LEVEL |
SIZE |
|
DATA_BASE |
LIKE |
SPACE |
|
DATE |
LIMITED |
SQL |
|
DBA |
LOOP |
SQLCODE |
|
DEBUGOFF |
MAX |
SQLERRM |
|
DEBUGON |
MIN |
START |
|
DECIMAL |
MINUS |
STATEMENT |
|
DECLARE |
MOD |
STDDEV |
|
DEFAULT |
NEW |
SUBTYPE |
|
NOCOMPRESS |
SUM |
Функции
Числовые функции
Функция |
Возвращаемое значение |
ABS(n) |
Абсолютное значение величины п. |
CEIL(n) |
Наименьшее целое, большее или равное п, |
COS(n) |
Косинус п (угла, выраженного в радианах). |
COSH(n) |
Гиперболический косинус п. |
ЕХР(я) |
e в степени n. |
FLOOR(n) |
Наибольшее целое, меньшее или рапное п. |
LN(n) |
Натуральный логарифм п, где п>0. |
LOG(m,n) |
Логарифм м по основанию т. |
MOD(m.n) |
Остаток от деления т на п. |
POWER(w.n) |
т в степени п. |
ROUND(n[,m]) |
п, округленное до т позиций после десятичной точки. По умолчанию т равно нулю. |
SIGN(n) |
Если.п<0,-1;еслии=0, 0; еслип>0, 1. , |
SIN(n) |
Синус л (угла, выраженного в радианах). |
SINHM |
Гиперболический синус. |
SQRT(n) |
Квадратный корень отп. Если п<0, возвращает значение NULL. |
TAN(n) |
Тангенс я (угла, выраженного в радианах). |
TANH(n) . |
Гиперболический тангенс п. |
TRUNC(n[,m]) |
п, усеченное до т позиций после от десятичной точки. По умолчанию т равно нулю. |
Символьные функции
Символьные функции, возвращающие символьные значения:
Функция 1 |
Возвращаемое значение |
CHR(n) |
Символ с кодом п. |
СОNСАТ(сhar1,char2) |
Конкатенация символьных строк char1 и char2. |
INITCAP(char) |
Символьная строка сhar, первые буквы всех слов в которой преобразованы в прописные. |
LOWER(char) |
Символьная строка char, осе буквы которой преобразованы d строчные. |
LPAD(char1.n [,char2}) |
Символьная строка chur1, которая дополняется слева последовательностью символов из char2 так, чтобы общая длина строки стала равна п. Значение chur2 по умолчанию -" (один пробел). Если часть многобайтового символа не помещается в добавляемой строке, то конец строки заполняется пробелами. |
LTRIM(char[,set]) |
Символьная строка char, в которой удалены все символы от начала вплоть до первого символа, которого нет в строке set. Значение set по умолчанию - '' (один пробел). |
NLS_INITCAP(char[,nls_sort]) |
Символьная строка char, в которой первые буквы всех слов преобразованы в прописные. Параметр nIs_sort определяет последовательность сортировки. |
NLS_LOWER(char[,nls_sort]) |
Символьная строка char, все буквы которой преобразованы в строчные. Параметр tils-sort определяет последовательность сортировки. |
NLS_UPPER(char[,nls_sort]) |
Символьная строка char, все буквы которой преобразованы в прописные. Параметр nts_sort определяет последовательность сортировки. |
REPLACE(char, search_string [,replacement_string]) |
Символьная строка char, в которой все фрагменты search_string заменены на replacement_string. Если параметр replacement_string не определен, все фрагменты search-string удаляются. |
RPAD(char1.n[,char2]) |
Символьная строка charl, которая дополнена справа последовательностью символов из chur2 так, что общая длина строки равна n. Если часть многобайтового символа не помещается в добавляемой строке, то конец строки заполняется пробелами. |
RTRIM(char[,set]) |
Символьная строка char, в которой удалены все символы справа вплоть до первого символа, которого нет в строке set. Значение параметра set по умолчанию -1 1 (один пробел). |
SOUNDEX(char) |
Символьная строка, содержащая фонетическое представление для char, на английском языке. |
SUBSTR(char,m[,n]) |
Фрагмент символьной строки char, начинающийся с символа т, длиной п символов (до конца строки, если параметр п не указан). |
SUBSTRB(char,m[,n]) |
Фрагмент символьной строки char, начинающийся с символа т, длиной л байтов (до конца строки, если параметр п не указан). |
TRANSLATE(char,from, to) |
Символьная строка char, в которой все символы, встречающиеся в строке from, заменены на соответствующие символы из to. |
UPPER(char) |
Символьная строка char, в которой все буквы преобразованы в прописные. |
Символьные функции, возвращающие числовые значения
Функция |
Возвращаемое значение |
ASCll(char) |
Возвращает десятичный код первого символа строки char в кодировке, принятой в базе данных. (Код ASCII в системах, использующих кодировку ASCII). Возвращает значение первого байта многобайтового символа. |
INSTR(charl.char2[,n[,m]]) |
Позиция первого символа m-ого фрагмента строки charl, совпадающего со строкой char2, начиная с n-ого символа. По умолчанию n u m равны 1. Номер символа отсчитывается от первого символа строки charl, даже когда п> 1. |
INSTRB(charl.char2[,n[,m]]) |
Позиция первого символа т-ого фрагмента строки charl, совпадающего со строкой char2, начиная с m-ого байта. По умолчанию п и т равны 1. Номер байта отсчитывается от первого символа строки charl, даже когда л> 1. . |
LENGTH(char) |
Длина строки char в символах. |
LENGTHB(c/iar) |
Длина строки char в байтах. |
NLSSORT(char1,char2[,n[,m]]) |
Зависящее от национального языка значение, используемое при сортировке строки char. |
Групповые функции
Функция |
Возвращаемое значение |
AVG([DISTINCT|ALL]n) |
Среднее значение от n, нулевые значения опускаются. |
COUNT([ALL]*) |
Число строк, извлекаемых в запросе или подзапросе. |
COUNT(IDISTINCT|ALL] expr) |
Число строк, для которых expr принимает не пустое значение. |
MAX([D1STINCT|ALL] expr) |
Максимальное значение выражения eхрr. |
MIN((DISTINCT|ALL] expr) |
Минимальное значение выражения eхрr. |
STDDEV([DISTINCT|ALL] n) |
Стандартное отклонение величины л, нулевые значения опускаются. |
SUM([DISTINCT|ALL] n) |
Сумма значений n |
VARIANCE([DIST1NCTIALL]n) |
Дисперсия величины п, нулевые значения опускаются. |
Функции работы с датами
Функция |
Возвращаемое значение |
ADD-MONTHS (d,n) |
Дата d плюс n месяцев. |
LAST-DAY (d) |
Последнее число месяца, указанного в d |
MONTHS-BETWEEN (d,e) |
Число месяцев между датами d1 и d2. |
NEW-TIME (d,a,b) |
Дата и время в часовом поясе a, соответствующие дате и времени в часовом поясе b, при этом d,a и b значения типа CHAR, определяющие часовые пояса. |
NEW-DAY (d,char) |
Дата первого после даты (/дня недели, название которого записано в с1шг. |
SYSDATE |
Текущая дата и время. |
Усечение и округление дат
Функция |
Возвращаемое значение |
ROUND(d[,fmt]) |
Дата d, округленная до единиц, указанных в форматной маске. |
TRUNC(d[,fmt]) |
Дата d, усеченная по форматной маске fmt. |
Форматные маски дат для функций ROUND и TRUNC.
В таблице перечислены форматные маски, которые можно использовать в функциях ROUND и TRUNC. По умолчанию используется форматная маска "DD".
Форматная маска |
Возвращаемое значение |
CC или SCC |
Первый день столетия |
SYYYY или YYYY или YYY или YY или Y или YEAR или SYEAR |
Первый день года ( округляется до 1 июля) |
Q |
Первый день квартала (округляется до 16 числа второго месяца квартала) |
MONTH или MON или MM или RM |
Первый день месяца (округляется до 16 числа) |
WW или IW |
Тот же день недели, что и первый день текущего года |
W |
Тот же день недели, что и первый день текущего месяца |
DDD или DDD или J |
День |
DAY или DY или D |
Первый день недели |
HH HH12 HH24 |
Час |
MI |
Минута |
Функции преобразования
Функция |
Возвращаемое значение |
CHARTOROWID(char) |
Char преобразуется из типа данных CHAR в тип данных ROWID |
CONVERT( char, dest_char_set [,source_char_set]) |
Преобразует символьную строку из набора символов source_char_set в набор символов dest_char_set |
HEXTORAW ( char) |
Преобразует значение char, содержащее шестнадцатиричные цифры, в значение типа данных RAW |
RAWTOHEX ( raw) |
Преобразует raw в символьное значение, содержащее его шестнадцатиричный эквивалент |
ROWIDTOCHAR (rowid) |
Преобразует значение типа ROWID в значение типа CHAR |
TO_CHAR ( expr [,fmt [,'nls_num_fmt']]) |
Преобразует значение expr типа DATE или NUMBER в значение типа CHAR по формату форматной маски fmt. Если fmt отсутствует, значения типа DATE преобразуются по формату, заданному по умолчанию, и значения типа NUMBER- в значение типа CHAR с шириной, достаточной для того, чтобы вместить все значащие цифры. Значение 'nls_num_fmt' определяет связанные с языком форматные маски. В Trusted ORACLE преобразует значения MLS или MLS_LABEL в значение типа VARCHAR2 |
TO_DATE ( char[,fmt [,'nls_lang']]) |
Преобразует char в значение типа DATE с помощью форматной маски fmt. Если fmt опускается, используется форматная маска для даты, принятая по умолчанию.'nls_ang' задает язык, используемый в названиях месяцев и дней |
TO_MULTI_BYTE ( char) |
Преобразует однобайтовые символы, имеющие многобайтовые эквиваленты, в соответствующие многобайтовые символы |
TO_NUMBER (char [,fmt [,'nls_lang']]) |
Преобразует char, содержащее число в формате, указанном параметром fmt, в значение типа NUMBER. 'nls_lang' задает язык, определяющий символы валют и числовые разделители |
TO_SINGLE_BYTE ( char) |
Преобразует многобайтовые символы, имеющие однобайтовые эквиваленты, в соответствующие однобайтовые символы |
Форматные маски.
Этот раздел описывет форматные маски дат и чисел.
Форматные маски дат в TO_CHAR и TO_DATE.
Элементы форматной маски даты перечислены в приведенной ниже таблице. Любую комбинацию этих элементов можно использовать как аргумент fmt функций TO_CHAR или TO_DATE. По умолчанию fmt равен 'DD-MON-YY'.
Элемент формата |
Возвращаемое значение |
SCC или CC |
Столетие; если указано 'S' то перед датами до нашей эры ставится '-'. |
YYYY или SYYYY |
Год; если указано'S' то перед датами до нашей эры ставится '-'. YYY или YY или Y] Последние 3, 2, или1 цифра года. |
IYYY |
4 цифры года по стандарту ISO. IYY или IY или I] Последние 3, 2, или1 цифра года по стандарту ISO. |
Y,YYY |
Год с запятой в указанной позиции. |
SYEAR или YEAR |
Год, записанный словами, а не цифрами; если указано'S' то перед датами до нашей эры ставится '-'. |
RR |
Последние 2 цифры года; для указания года в других столетиях. |
BC или AD |
BC- до нашей эры(до н.э.); AD - нашей эры |
B.C. или A.D. |
B.C.- до нашей эры(до н.э.); A.D. - нашей эры |
Q |
Квартал (1, 2, 3, 4;JAN-MAR=1). |
MM |
Месяц(01-12; JAN=1). |
RM |
Нумерация месяцев римскими цифрами(I-XII; JAN=I). |
MONTH |
Название месяца, дополненное пробелами до 9-ти символов. |
MON |
Сокращенное название месяца. |
WW или W |
Неделя года (1-52) или месяца (1-5). |
IW |
Неделя года (1-52 или 1-53) по стандарту ISO. |
DDD или DD или D |
День года (1-366) или месяца (1-31) или недели (1-7). |
DAY |
Название дня, дополненное пробелами до 9-ти символов. |
DY |
Сокращенное название дня. |
J |
Дата юлианского календаря; число дней, считая с первого января 4712 года до н.э. |
AM или PM |
AM -до полудня,PM- после полудня |
A.M. или P.M. |
A.M. -до полудня,P.M.- после полудня |
HH или HH12 |
Час дня (1-12). |
HH24 |
Час дня (0-23). |
MI |
Минута (0-59) |
SS или SSSSS |
Секунда (0-59) или количество секунд после полуночи (0-86399). |
-/,.;: |
Знаки пунктуации. |
"...текст..." |
Текст воспр в возвращенном значении. |
Префикы и суффиксы элементов формата даты
К элементам формата даты можно добавлять следующие префиксы:
FM |
"Режим заполнения".Подавляет заполнение пробелами, когда стоит перед MONTH или DAY |
FX |
"Точный формат". Этот модификатор задает точное соответствие символьного аргумента и форматной маски даты в функции TO_DATE. |
К элементам формата даты можно добавлятть следующие суффиксы:
TH |
Порядковый номер ("DDTH" для "4TH"). |
SP |
Номер, записанный словами ("DDSP" для "FOUR"). |
SPTH и THSP |
Порядковый номер, записанный словами ("DDSPTH" для "FOURTH"). |
Прописные и строчные буквы в элементах формата даты.
Следующие строки задают вывод прописными буквами, вывод прописными буквами только начальных букв слов, или вывод строчными буквами.
Прописные |
Прописная начальная |
Строчные |
DAY |
Day |
.day |
DY |
Dy |
.dy |
MONTH |
Month |
.month |
MON |
Mon |
.mon |
YEAR |
Year |
.year |
AM |
Am |
.am |
PM |
Pm |
.pm |
A.M. |
A.m. |
a.m. |
P.M. |
P.m. |
p.m. |
Если к элементу формата даты добавляется префикс или суффикс, то регистр (прописные, строчные буквы) определяется элементом формаиа , а не префиксом или суффиксом. Например, 'ddTH ' задает "04th" а не "04TH".
Элементы формата числа для TO_CHAR
В следующей таблице перечислены элементы формата числа. Комбинацию этих элементов можно использовать как аргумент fnu функции TO_CHAR.
Элемент формата |
Пример |
Описание |
9 |
'999' |
Количество девяток указывает число возвращаемых значащих цифр. |
0 |
'0999' |
Добавляет нули перед числом. |
$ |
'$9999' |
Добавляет знак доллара перед числом. |
В |
'В9999' |
Заменяет нулевые значения пробелами. |
Ml |
'99999MI' |
Возвращает знак '-' после отрицательных значении. |
S |
S9999 |
Возвращает знак '+' для положительных значений и знак '-' для отрицательных значений в указанную позицию. |
PR |
'9999PR' |
Возвращает отрицательные значения в <угловых скобках>. |
D |
99D99 |
Возвращает символ, представляющий десятичную точку, в указанную позицию. |
С |
9G999 |
Возвращает символ разделения цифр на группы в указанную позицию. |
С |
С999 |
Возвращает международной знак валюты в указанную позицию. |
L |
L999 |
Возвращает знак местной валюты в указанную позицию. |
, |
'9,999' |
Возвращает запятую в указанную позицию. |
. |
'99.99' |
Возвращает точку в указанную позицию. |
V |
'999V99' |
Умножает значение на 10n, где n количество девяток после 'V'. |
ЕЕЕЕ |
'9.999ЕЕЕЕ' |
Возвращает значение в нормализованной форме. В fnu должно быть ровно четыре буквы 'Е'. |
RN или rn |
RN |
Возвращает римские цифры прописными или строчными буквами (целое число в диапазоне от 1 до 3999). |
DATE |
'DATE' |
Возвращает значение, преобразованное из даты юлианского календаря в формат 'MM/DD/YY'. |
Другие функции
Функция |
Возвращаемое значение |
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
Создает тело хранимого пакета.
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;