У меня есть таблица в Oracle 12c, который реализует последовательность для увеличения идентификаторов на вставках:Oracle ID триггера вставка с ID, который уже принял
CREATE SEQUENCE
"ORCL_WD"."BIR_GRIDBASE_ID_SEQ"
MINVALUE 1 MAXVALUE 999999999999999999999999
INCREMENT BY 1 START WITH 61 CACHE 20 NOORDER NOCYCLE NOPARTITION ;
и триггер для этого:
create or replace trigger BIR_GRIDBASE_TRIG
before insert on "ORCL_WD"."BIR_GRIDBASE"
for each row
begin
if inserting then
if :NEW."ID" is null then
select BIR_GRIDBASE_ID_SEQ.nextval into :NEW."ID" from dual;
end if;
end if;
end;
Этих последовательность работает, но у меня есть некоторые пробелы в моих идентификационных полях, поэтому при вставке новых элементов в эту таблицу идентификаторы дубликатов вставки.
Как предотвратить это?
Включает ли триггер вставку повторяющихся значений или проблема в том, что триггер генерирует пробелы? – Aleksej
'if: NEW.« Идентификатор »имеет значение null, затем' - если его не 'NULL', то он не будет использовать значение последовательности и будет просто вставлять любое значение, предложенное пользователем, - последовательность не будет знать, что это значение было используется и будет просто пытаться использовать следующее значение в последовательности. – MT0
Вам не нужно заглядывать в область SQL, чтобы получить следующее значение последовательности. Вы могли бы просто сделать: ': NEW.ID: = BIR_GRIDBASE_ID_SEQ.nextval;' – MT0