Не понимая, что именно вы хотите достичь sh с уникальным значением, поскольку вы не объясняете это, вы можете сделать что-то вроде этого:
Создайте последовательность для создания добавочного порядковый номер
SQL> create sequence my_seq start with xxx increment by yyy cache zzz;
Где
- xxx - это номер, с которого должна начинаться последовательность
- yyy - значение приращения последовательности (обычно 1 )
- Поскольку вы планируете использовать его каждый раз, когда пользователь входит в систему, было бы неплохо кэшировать некоторые значения для более быстрого доступа. zzz представляет количество значений последовательности, которую вы хотите кэшировать.
Назначьте значения каждому пользователю, который входит в систему
Способ присвоения этого значения для пользователя каждый раз, когда он входит в систему, через триггер входа в систему и связывает его со свойствами сеанса, используя преимущества, предоставляемые контекстом по умолчанию SYS_CONTEXT. Конечно, для этого вам понадобится пользователь DBA для установки триггера в схеме администратора (как sys или system)
Пример сохранения этих значений в настраиваемой таблице аудита:
SQL> CREATE TRIGGER AFT_LOG_DBT
AFTER LOGON ON DATABASE
DECLARE
-- declare variables
v_db_user varchar2(100);
v_os_user varchar2(100);
v_seq number;
BEGIN
SELECT sys_context('userenv','session_id') , -- the session id
sys_context('userenv','osuser') , -- the os user
my_seq.nextval -- the sequence next val
INTO
v_db_user,
v_os_user,
v_seq
FROM DUAL;
-- insert those values into an audit table
insert into your_schema.log_audit ( logon_time , db_user, os_user, seq_val )
values ( sysdate , v_db_user, v_os_user, v_seq );
commit;
END;
Поскольку вы не объясняли, что вы хотите сделать с уникальным значением последовательности, я попытался предоставить вам пример варианта использования.
Я никогда не получал повторяющиеся номера последовательности от генератора последовательности, если он не обернут максимальное значение или настроен на цикл.