UID в Oracle SQL. Введение
Функция UID в Oracle SQL возвращает числовой идентификатор текущего пользователя базы данных. Это простой способ определить, под каким пользовательским ID выполняется запрос, особенно полезно в PL/SQL, триггерах и при отладке прав доступа. В этой статье ты найдёшь 45 практических примеров использования UID.
🖋️ Синтаксис функции UID
SELECT UID FROM dual;
UID— возвращает числовой идентификатор пользователя текущей сессии.- Используется без аргументов.
- Работает в SQL и PL/SQL контекстах.
🔄 Где используется UID
- Аудит действий пользователя
- Отладка доступа и прав в триггерах
- Условная логика по ID
- Отображение системной информации
- Сравнение с SYS_CONTEXT(‘USERENV’,’SESSIONID’)
📊 Примеры использования UID в Oracle SQL (1–5 из 50)
- Получить текущий UID:
SELECT UID FROM dual;
- Сравнение UID с конкретным значением:
SELECT * FROM logs WHERE user_id = UID;
- Использование UID в триггере:
CREATE OR REPLACE TRIGGER trg_check_uid
BEFORE INSERT ON actions
BEGIN
INSERT INTO audit_log (user_id, event_time) VALUES (UID, SYSDATE);
END;
- Сравнение UID с SESSION_USER:
SELECT UID, USER FROM dual;
- Использование UID в PL/SQL блоке:
DECLARE
v_uid NUMBER;
BEGIN
v_uid := UID;
DBMS_OUTPUT.PUT_LINE('Ваш UID: ' || v_uid);
END;
- UID в представлении:
CREATE OR REPLACE VIEW v_uid AS SELECT UID AS user_id FROM dual;
- UID в логировании:
INSERT INTO login_audit (user_id, login_time) VALUES (UID, SYSDATE);
- UID с добавлением в таблицу:
INSERT INTO activity (user_id, action) VALUES (UID, 'Открытие отчёта');
- UID в аналитике:
SELECT UID, COUNT(*) FROM audit_log GROUP BY UID;
- UID и CASE:
SELECT CASE WHEN UID = 0 THEN 'Администратор' ELSE 'Пользователь' END AS роль FROM dual;
- UID с SYS_CONTEXT:
SELECT UID, SYS_CONTEXT('USERENV', 'SESSION_USER') FROM dual;
- UID в CTE:
WITH current_uid AS (SELECT UID AS id FROM dual)
SELECT * FROM current_uid;
- UID и PL/SQL блок логирования:
BEGIN
INSERT INTO log_table (user_id, message) VALUES (UID, 'Действие пользователя');
END;
- UID с IDENTITY генерацией:
INSERT INTO user_logs (log_id, user_id) VALUES (user_seq.NEXTVAL, UID);
- UID в WHERE EXISTS:
SELECT * FROM audit_log a WHERE EXISTS (
SELECT 1 FROM dual WHERE UID = a.user_id
);
- UID и соединение с другой таблицей:
SELECT a.* FROM audit_log a JOIN users u ON a.user_id = UID;
- UID и HASH для анонимизации:
SELECT DBMS_CRYPTO.HASH(TO_CHAR(UID), 2) AS uid_hash FROM dual;
- UID и ROWNUM:
SELECT UID FROM dual WHERE ROWNUM = 1;
- UID в аналитике OVER:
SELECT UID, ROW_NUMBER() OVER (ORDER BY SYSDATE) FROM dual;
- UID в подстановке по умолчанию:
SELECT NVL(UID, 0) FROM dual;
- UID и запись в лог через MERGE:
MERGE INTO user_actions t
USING (SELECT UID AS id FROM dual) s
ON (t.user_id = s.id)
WHEN NOT MATCHED THEN
INSERT (user_id, action) VALUES (s.id, 'Вход');
- UID в подзапросе SELECT:
SELECT employee_id FROM employees WHERE created_by = (SELECT UID FROM dual);
- UID и регистр значений:
SELECT LOWER(TO_CHAR(UID)) FROM dual;
- UID и проверка прав в логике:
BEGIN
IF UID = 100 THEN
DBMS_OUTPUT.PUT_LINE('Тестовый пользователь');
END IF;
END;
- UID в аналитике COUNT:
SELECT UID, COUNT(*) OVER () AS total FROM dual;
- UID в виртуальной колонке:
CREATE TABLE temp_log (
log_id NUMBER GENERATED ALWAYS AS (UID + 1000) VIRTUAL
);
- UID в фильтре UNION:
SELECT 'UID:' || UID FROM dual
UNION
SELECT 'USER:' || USER FROM dual;
- UID и создание временной таблицы:
CREATE GLOBAL TEMPORARY TABLE session_data (
user_id NUMBER DEFAULT UID
) ON COMMIT PRESERVE ROWS;
- UID в DELETE:
DELETE FROM audit_log WHERE user_id = UID;
- UID в UPDATE:
UPDATE activity SET updated_by = UID WHERE status = 'Активно';
- UID в PIVOT:
SELECT * FROM (
SELECT UID, action_type FROM actions
) PIVOT (COUNT(*) FOR action_type IN ('LOGIN', 'LOGOUT'));
- UID в аналитике RANK:
SELECT UID, RANK() OVER (ORDER BY UID DESC) FROM dual;
- UID в динамическом SQL:
EXECUTE IMMEDIATE 'INSERT INTO session_log (user_id) VALUES (' || UID || ')';
- UID и дата в списке действий:
SELECT UID || ' / ' || TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM dual;
- UID с агрегатной логикой:
SELECT MAX(UID), MIN(UID) FROM dual;
- UID в фильтре NOT EXISTS:
SELECT * FROM users u WHERE NOT EXISTS (
SELECT 1 FROM sessions s WHERE s.user_id = UID
);
- UID и CASE с PL/SQL:
DECLARE
v_uid NUMBER := UID;
BEGIN
CASE
WHEN v_uid = 1 THEN DBMS_OUTPUT.PUT_LINE('Суперюзер');
ELSE DBMS_OUTPUT.PUT_LINE('Обычный');
END CASE;
END;
- UID в аналитике DENSE_RANK:
SELECT UID, DENSE_RANK() OVER (ORDER BY UID) FROM dual;
- UID в JSON_TABLE:
SELECT * FROM JSON_TABLE('{"uid": ' || UID || '}', '$'
COLUMNS (id NUMBER PATH '$.uid'));
- UID и пользовательские представления:
CREATE OR REPLACE VIEW v_current_user AS
SELECT UID AS id, USER AS name FROM dual;
- UID в HTML-отчёте:
SELECT '<b>UID:</b> ' || UID || '<br>' FROM dual;
- UID и LISTAGG:
SELECT LISTAGG(TO_CHAR(UID), ', ') WITHIN GROUP (ORDER BY UID) FROM dual;
- UID и защита данных:
SELECT CASE WHEN UID = 0 THEN NULL ELSE UID END FROM dual;
- UID с ROWID:
SELECT UID, ROWID FROM dual;
- UID с преобразованием типов:
SELECT CAST(UID AS VARCHAR2(10)) FROM dual;
- UID в аналитике LAG:
SELECT UID, LAG(UID) OVER (ORDER BY SYSDATE) FROM dual;
📆 Заключение: зачем использовать UID в Oracle SQL
Функция UID — это быстрый и безопасный способ получить числовой ID текущего пользователя. Это особенно полезно в ситуациях, где важно отличать пользователей по внутреннему идентификатору, а не по имени.
UID удобно использовать в логировании, аудите, проверках доступа и автоматических действиях, где ID нужен в числовом виде. Он также используется в сочетании с системными представлениями и функцией USER.
🕸️ Следующая статья:
SYNONYM в Oracle SQL — как создавать псевдонимы для таблиц