CURRENT в Oracle SQL — как использовать текущие значения курсора, даты и временных зон

🟢 CURRENT в Oracle SQL. Введение

CURRENT — это часть нескольких ключевых конструкций в Oracle SQL и PL/SQL, которые возвращают текущие значения: времени, даты, временных зон или строки курсора. Само по себе CURRENT — это не самостоятельный оператор, а префикс в составе таких выражений как:

  • CURRENT_DATE

  • CURRENT_TIMESTAMP

  • CURRENT_USER

  • CURRENT OF (для работы с курсорами)

Эти конструкции позволяют удобно работать с контекстной информацией и делают код более адаптивным и читаемым.


🔤 Написание

Наиболее часто используемые формы:

sql
SELECT CURRENT_DATE FROM dual;
SELECT CURRENT_TIMESTAMP FROM dual;
SELECT CURRENT_USER FROM dual;

Для курсоров:

sql
UPDATE таблица
SET ...
WHERE CURRENT OF имя_курсора;

🔄 Где используется

  • Для получения текущей даты и времени (учитывая сеансовую зону)

  • В аудит-триггерах, логах, PL/SQL-скриптах

  • Для работы с текущим пользователем (аутентификация, аудит)

  • В WHERE CURRENT OF — безопасное обновление строки, извлечённой курсором


🧪 10 Примеров использования CURRENT

1️⃣ Текущая дата

sql
SELECT CURRENT_DATE FROM dual;

Возвращает дату в текущей сессионной временной зоне.


2️⃣ Текущее время с точностью до микросекунд

sql
SELECT CURRENT_TIMESTAMP FROM dual;

3️⃣ Текущий пользователь

sql
SELECT CURRENT_USER FROM dual;

Имя пользователя, под которым выполняется SQL-запрос.


4️⃣ Сравнение CURRENT_DATE с SYSDATE

sql
SELECT CURRENT_DATE, SYSDATE FROM dual;

Отличие: CURRENT_DATE зависит от сессионной временной зоны, а SYSDATE — от сервера.


5️⃣ Получение текущей временной зоны

sql
SELECT SESSIONTIMEZONE, DBTIMEZONE FROM dual;

6️⃣ CURRENT OF с курсором

plsql
DECLARE
CURSOR c_emps IS SELECT employee_id FROM employees FOR UPDATE;
BEGIN
FOR r IN c_emps LOOP
UPDATE employees SET salary = salary * 1.05
WHERE CURRENT OF c_emps;
END LOOP;
END;

Обновляет только текущую строку из курсора.


7️⃣ Логирование с CURRENT_TIMESTAMP

sql
INSERT INTO log_table (log_time, event)
VALUES (CURRENT_TIMESTAMP, 'Удаление записи');

8️⃣ Триггер с CURRENT_USER

plsql
CREATE OR REPLACE TRIGGER trg_audit
BEFORE INSERT ON sensitive_table
FOR EACH ROW
BEGIN
:NEW.created_by := CURRENT_USER;
END;

9️⃣ Разница между SYSTIMESTAMP и CURRENT_TIMESTAMP

sql
SELECT SYSTIMESTAMP, CURRENT_TIMESTAMP FROM dual;

SYSTIMESTAMP — время на сервере, CURRENT_TIMESTAMP — в сессии пользователя.


🔟 С CURRENT_DATE в условиях

sql
SELECT * FROM appointments
WHERE appointment_date = CURRENT_DATE;

🧩 Заключение

Хотя CURRENT — не самостоятельный оператор, он лежит в основе мощных и часто используемых конструкций Oracle SQL. Его применение особенно актуально в:

  • Отчётности по текущей дате и пользователю

  • PL/SQL-программах с курсорами

  • Логировании и аудите

💡 Запомни:

  • CURRENT_DATE, CURRENT_TIMESTAMP — сессионные значения

  • CURRENT OF нужен для обновления строки из курсора

  • CURRENT_USER полезен в многопользовательских сценариях


🔜 Следующая статья:

CROSS в Oracle SQL — как использовать декартово произведение таблиц


Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии