
2. Встроенные функции sql
Функция принимает некоторые данные и возвращает их в преобразованном виде, в зависимости от того, для какой цели она разрабатывалась. В частности, функции могут изменять внешнее представление данных (например, переводить дату в соответствующий день недели), выполнять их статистическую обработку или изменять содержание (например, преобразовывать один набор кодов в другой).
Все представленные в этой теме функции разбиты на две категории: однострочные и агрегатные. Однострочные функции выполняют операции, которые могут повлиять на каждую строку таблицы. В отличие от них агрегатные функции предназначены для получения информации о некоторых подмножествах данных, выбранных определенным образом.
2.1. Однострочные функции
Однострочные функции позволяют управлять вводом и представлением данных на построчной основе и делятся на следующие группы:
• Системные переменные
• Числовые функции
• Символьные (текстовые) функции
• Функции для работы с датами
• Функции преобразования данных
• Прочие функции
Системные переменные
Системные переменные создаются Oracle и содержат информацию о среде, в которой функционирует база данных. Три системные переменные, описанные здесь, позволяют определять системные дату и время, идентификатор пользователя, выполняющего SQL-оператор, и имя компьютера, с которого пользователь вводит команды. Эти переменные могут быть очень полезны в самых разнообразных ситуациях.
SYSDATE
Функция SYSDATE возвращает текущие дату и время. Если говорить точнее, она возвращает дату и время, которые являются текущими с точки зрения сервера Oracle, поэтому если сервер окажется в другом часовом поясе, то возвращаемая информация будет относиться именно к этому поясу. Чтобы увидеть, как работает эта функция, введите следующую команду:
SELECT SYSDATE FROM DUAL;
В ответ на экране будет показана текущая дата. Однако интереснее использовать эту команду в операторах DML. Например, указав SYSDATE в операторе INSERT, можно вставить текущую дату в любое поле данных:
INSERT INTO purchase VALUES ('Small Widget', 10, sysdate);
С текущей датой можно манипулировать, как с любым другим значением, добавляя и вычитая дни. Например, отняв 7 от текущего значения SYSDATE, вы получите дату, которая была ровно неделю назад. Функция SYSDATE полезна также при просмотре записей с датами, которые определенным образом связаны с сегодняшним днем. Например, чтобы увидеть все продажи за последние 30 дней, можно воспользоваться следующей командой:
SELECT * FROM purchase WHERE purchase_date BETWEEN (SYSDATE-30) AND SYSDATE;
USER
Функция USER и следующей за ней функция USERENV полезны, когда нужно вести аудит действий над таблицей, т.е. следить за тем, кто вставляет, обновляет и удаляет записи.
Функция USER возвращает идентификатор пользователя Oracle, который выдал команду, содержащую эту функцию. Чтобы понять смысл сказанного, следует ввести следующую команду:
SELECT USER FROM DUAL;
В результате увидите свое имя, под которым вошли в систему перед запуском SQL*Plus. На данный момент эта функция представляет лишь теоретический интерес, но она пригодится в дальнейшем, когда потребуется сохранять идентификатор пользователя, вносящего изменения в базу данных.
USERENV
Функция USERENV может возвращать множество разных сведений о вычислительной среде, в которой была выдана содержащая ее команда. Наибольший интерес представляет имя компьютера, на котором работает пользователь.
Увидеть имя своего компьютера можно с помощью следующей команды:
SELECT USERENV('TERMINAL') FROM DUAL;
Эта функция в сочетании с рассмотренной выше функцией USER позволяет определить, кто и с какого компьютера обращался к базе данных. Добавив сюда функцию SYSDATE, получим начало детализированной записи аудита.