Вот, совсем забыл (просто склероз, какой то!). При работе с датами, есть функция TO_DATE, которая производит преобразование обратное TO_CHAR при работе с типом DATE. Данная функция, преобразует тип CHAR или VARCHAR2 в тип DATE. Ее синтаксис таков:
TO_DATE(строка_символов, [, формат [, nls_параметр]])
Здесь в данном случае "строка_символов" строка типа CHAR или VARCHAR. Все остальное, как и шаге 71 для TO_CHAR(). Таблица форматов преобразования та же! Пример использования, приведен ниже:
SET SERVEROUTPUT ON BEGIN DBMS_OUTPUT.enable; -- Function TO_DATE() -- DBMS_OUTPUT.put_line( TO_CHAR(TO_DATE('12-11-2003', 'DD-MM-YYYY'), 'DD-Month-YYYY')); END; /
После запуска получаем:
SQL> SET SERVEROUTPUT ON SQL> SQL> BEGIN 2 3 DBMS_OUTPUT.enable; 4 5 -- Function TO_DATE() -- 6 DBMS_OUTPUT.put_line( TO_CHAR(TO_DATE('12-11-2003', 'DD-MM-YYYY'), 'DD-Month-YYYY')); 7 8 END; 9 / 12-Ноябрь -2003 Процедура PL/SQL успешно завершена.
Вот так достаточно, интересно сработал формат Month. Месяц выводится с первой прописной, а затем строчные символы. Итак, давайте, наконец, закончим пока с описаниями функций, от которых вы уже, наверное, подустали, но материал, бесспорно очень полезен. Подведем итог, еще несколькими функциями, которые, несомненно, вам пригодятся в дальнейшем. Одна из таких весьма полезных функций следующая:
NVL(выражение 1, выражение 2)
А, вот что она производит: Возвращает "выражение 2", если "выражение 1" является значением NULL. В противном случае возвращает "выражение 1". Если "выражение 1", не является строкой символов, то возвращаемое значение имеет тот же тип данных, что и "выражение 1", иначе возвращаемое. С помощью этой функции очень легко избавиться от NULL в активном наборе запроса. Например, если дать вот такой запрос к таблице SALESREPS нашей учебной БД:
SELECT s.NAME, NVL(s.MANAGER, 0) MANAGER, NVL(s.QUOTA, 0) QUOTA FROM SALESREPS s /
В результате получим следующее:
SQL> SELECT s.NAME, NVL(s.MANAGER, 0) MANAGER, NVL(s.QUOTA, 0) QUOTA 2 FROM SALESREPS s 3 / NAME MANAGER QUOTA ------------------------------ ---------- ---------- Вася Пупкин 104 350 Маша Распутина 106 300 Филип Киркоров 108 350 Света Разина 0 275 Наташа Королева 106 200 Игорь Николаев 104 300 Крис Кельми 101 0 Игорь Петров 106 350 Дима Маликов 104 275 Маша Сидорова 108 300 Максим Галкин 108 400 11 строк выбрано.
Хорошо видно, что 4-я и 7-я строка, теперь получили вместо NULL значение 0! Хотя это и нарушает принцип тройственной логики, но, тем не менее, избавляет от лишних хлопот. Вот так можно легко и просто раз и навсегда покончить с NULL-ами! :)
Еще одна довольно интересная функция которая может пригодиться вам в дальнейшем. Функция UID. Синтаксис прост:
UID
Данная функция, возвращает целое число однозначно, идентифицирующая текущего пользователя базы данных. При этом у нее нет аргументов.
SET SERVEROUTPUT ON BEGIN DBMS_OUTPUT.enable; -- Function UID() -- DBMS_OUTPUT.put_line( TO_CHAR(UID)); END; /
После запуска получаем:
SQL> SET SERVEROUTPUT ON SQL> SQL> BEGIN 2 3 DBMS_OUTPUT.enable; 4 -- Function UID() -- 5 DBMS_OUTPUT.put_line( TO_CHAR(UID)); 6 7 END; 8 / 61 Процедура PL/SQL успешно завершена.
При этом пользователь у нас MILLER, как вы помните. В чем легко убедиться, введя в SQL*Plus команду SHOW USER:
SQL> SHOW USER USER имеет значение "MILLER"
Кстати именно для этого есть функция:
USER
Возвращает значение типа VARCHAR2 содержащее имя текущего пользователя Oracle. Аргументов не имеет.
Пример:
SET SERVEROUTPUT ON BEGIN DBMS_OUTPUT.enable; -- Function UID() -- DBMS_OUTPUT.put_line( TO_CHAR(UID)); -- Function USER() -- DBMS_OUTPUT.put_line( 'User '||USER||' Uid '||TO_CHAR(UID)); END; /
Получаем:
SQL> BEGIN 2 3 DBMS_OUTPUT.enable; 4 -- Function UID() -- 5 DBMS_OUTPUT.put_line( TO_CHAR(UID)); 6 7 -- Function USER() -- 8 DBMS_OUTPUT.put_line( 'User '||USER||' Uid '||TO_CHAR(UID)); 9 10 END; 11 / 61 User MILLER Uid 61 Процедура PL/SQL успешно завершена.
Вот так например, легко сделать что-то вроде аудита! Но это уже ваша фантазия! Еще одна интересная функция:
USERENV(параметр)
Возвращает значение типа VARCHAR2 содержащее сведения о текущем сеансе с учетом "параметр". Значения "параметр" содержит следующая таблица:
Значение "параметр" | Поведение функции USERENV |
---|---|
'OSDBA' | Если в текущем сеансе разрешена роль OSDBA то возвращается 'TRUE' в противном случае возвращается 'FALSE'. При этом не забывайте, что возвращается VARCHAR2, а не BOOLEAN! |
'LANGUAGE' | Возвращает язык и территорию, которые используется в этом сеансе, а также набор символов базы данных. Это параметр средства NLS. Возвращаемое значение имеет вид: язык_территория.набор_символов |
'TERMINAL' | Возвращает идентификатор терминала текущего соединения, зависящий от вида, операционной системы. Для распределенных SQL - операторов возвращается идентификатор локального соединения. |
'SESSIONID' | Возвращает идентификатор соединения способного выполнить аудит, если параметр инициализации AUDIT_TRAIL установлен в TRUE. |
'ENTRYID' | Возвращает идентификатор доступного входа способного выполнить аудит, если параметр инициализации AUDIT_TRAIL установлен в TRUE. |
'LANG' | Возвращает сокращенное название языка, принятого в ISO. |
Давайте попробуем это в действии:
SET SERVEROUTPUT ON BEGIN DBMS_OUTPUT.enable; -- Function USER() -- DBMS_OUTPUT.put_line( 'User '||USER||' Uid '||TO_CHAR(UID)); -- Function USERENV() -- DBMS_OUTPUT.put_line( USERENV('LANGUAGE')); -- Function USERENV() -- DBMS_OUTPUT.put_line( USERENV('TERMINAL')); -- Function USERENV() -- DBMS_OUTPUT.put_line( USERENV('SESSIONID')); -- Function USERENV() -- DBMS_OUTPUT.put_line( USERENV('ENTRYID')); -- Function USERENV() -- DBMS_OUTPUT.put_line( USERENV('LANG')); END; /
Получаем:
SQL> SET SERVEROUTPUT ON SQL> SQL> BEGIN 2 3 DBMS_OUTPUT.enable; 4 -- Function USER() -- 5 DBMS_OUTPUT.put_line( 'User '||USER||' Uid '||TO_CHAR(UID)); 6 7 -- Function USERENV() -- 8 DBMS_OUTPUT.put_line( USERENV('LANGUAGE')); 9 10 -- Function USERENV() -- 11 DBMS_OUTPUT.put_line( USERENV('TERMINAL')); 12 13 -- Function USERENV() -- 14 DBMS_OUTPUT.put_line( USERENV('SESSIONID')); 15 16 -- Function USERENV() -- 17 DBMS_OUTPUT.put_line( USERENV('ENTRYID')); 18 19 -- Function USERENV() -- 20 DBMS_OUTPUT.put_line( USERENV('LANG')); 21 22 END; 23 / User MILLER Uid 61 RUSSIAN_CIS.CL8MSWIN1251 ORAHOME 1592 0 RU Процедура PL/SQL успешно завершена.
Вот так, действует функция USERENV. Вот собственно, пока все со встроенными функциями PL/SQL. Могу сразу сказать, что мы с вами рассмотрели далеко не все функции, но пока это достаточный минимум для того, чтобы приступить к изучению дальнейшего материала. Можете пока поработать со всем этим, и если есть вопросы, то задавайте!