Погружение в базы данных Oracle

Данная книга является руководством для начинающих специалистов в области анализа и обработки данных. В книге рассматривается язык SQL и его процедурное расширение PL/SQL от компании Oracle.

Купить книгу

SQL без слёз

Цель книги заключается в том, чтобы научить любого человека работать с реляционными базами данных и получать из них необходимую информацию посредством выполнения SQL-запросов.

Скачать книгу

 ›  ›  ›  › Получение текущей даты и времени в PL/SQL Oracle

Получение текущей даты и времени в PL/SQL Oracle

В любом языке программирования важно знать, как получить текущую дату и время.

Функции, возвращающие дату и время

Функция Часовой пояс Тип возвращаемого значения
CURRENT_DATE Сеанс DATE
CURRENT_TIMESTAMP Сеанс TIMESTAMP WITH TIME ZONE
LOCALTIMESTAMP Сеанс TIMESTAMP
SYSDATE Сервер базы данных DATE
SYSTIMESTAMP Сервер базы данных TIMESTAMP WITH TIME ZONE

Какую же функцию использовать в конкретной ситуации? Ответ зависит от нескольких факторов, которые, вероятно, стоит рассматривать в следующем порядке:

  1. Если вы используете версию, предшествующую Oracle8i, или должны обеспечить совместимость с ней, выбор небогат: используйте SYSDATE.
  2. Какое время вас интересует — вашего сеанса или сервера базы данных? В первом случае используйте функцию, возвращающую сеансовое время, а во втором — функцию, возвращающую часовой пояс базы данных.
  3. Должен ли часовой пояс возвращаться в составе текущей даты и времени? Если должен, используйте функцию SYSTIMESTAMP или CURRENT_TIMESTAMP.

Если будет выбрана функция, возвращающая сеансовое время, проследите за тем, чтобы часовой пояс сеанса был задан правильно. Информацию о часовом поясе сеанса и базы данных можно получить при помощи функций SESSIONTIMEZONE и DBTIMEZONE соответственно. Чтобы получить время в часовом поясе базы данных, необходимо изменить часовой пояс сеанса на DBTIMEZONE, а затем использовать одну из сеансовых функций.

Примеры использования этих функций:

BEGIN
DBMS_OUTPUT.PUT_LINE('Session Timezone='||SESSIONTIMEZONE);
DBMS_OUTPUT.PUT_LINE('Session Timestamp='||CURRENT_TIMESTAMP);
DBMS_OUTPUT.PUT_LINE('DB Server Timestamp='||SYSTIMESTAMP);
DBMS_OUTPUT.PUT_LINE('DB Timezone='||DBTIMEZONE);
EXECUTE IMMEDIATE 'ALTER SESSION SET TIME_ZONE=DBTIMEZONE';
DBMS_OUTPUT.PUT_LINE('DB Timestamp='||CURRENT_TIMESTAMP);

-- Возврат часового пояса сеанса к местному значению
EXECUTE IMMEDIATE 'ALTER SESSION SET TIME_ZONE=LOCAL';
END;

Результат:

Session Timezone=-04:00
Session Timestamp=23-JUN-08 12.48.44.656003000 PM -04:00
DB Server Timestamp=23-JUN-08 11.48.44.656106000 AM -05:00
DB Timezone=+00:00
DB Timestamp=23-JUN-08 04.48.44.656396000 PM +00:00

В этом примере сеанс начинается в Восточном часовом поясе (–4:00), тогда как сервер работает по времени. Центрального часового пояса (–5:00), но при этом в самой базе данных используется время GMT (+00:00). Чтобы получить время в часовом поясе базы данных, мы сначала приводим часовой пояс сеанса в соответствие с часовым поясом базы данных, а затем вызываем функцию часового пояса сеанса CURRENT_TIMESTAMP. Наконец, часовой пояс сеанса снова возвращается с исходному местному значению.

Метки: , .

Записи по теме

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *