Получение текущей даты и времени в PL/SQL Oracle
В любом языке программирования важно знать, как получить текущую дату и время.
Функции, возвращающие дату и время
Функция | Часовой пояс | Тип возвращаемого значения |
CURRENT_DATE | Сеанс | DATE |
CURRENT_TIMESTAMP | Сеанс | TIMESTAMP WITH TIME ZONE |
LOCALTIMESTAMP | Сеанс | TIMESTAMP |
SYSDATE | Сервер базы данных | DATE |
SYSTIMESTAMP | Сервер базы данных | TIMESTAMP WITH TIME ZONE |
Какую же функцию использовать в конкретной ситуации? Ответ зависит от нескольких факторов, которые, вероятно, стоит рассматривать в следующем порядке:
- Если вы используете версию, предшествующую Oracle8i, или должны обеспечить совместимость с ней, выбор небогат: используйте SYSDATE.
- Какое время вас интересует — вашего сеанса или сервера базы данных? В первом случае используйте функцию, возвращающую сеансовое время, а во втором — функцию, возвращающую часовой пояс базы данных.
- Должен ли часовой пояс возвращаться в составе текущей даты и времени? Если должен, используйте функцию 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. Наконец, часовой пояс сеанса снова возвращается с исходному местному значению.
Метки: Oracle, Дата и время.