training-web.ruГлавнаяКатегорииО насКарта сайтаПоискТёмная тема

Категории

Как создать триггер Oracle

Создано: 05 декабря 2017Автор: Егор Астапов2993 просмотраСложность: легкий

Как создать триггер для определения времени изменения данных Oracle. Вы можете каждый раз генерировать данные средствами PHP, Python, но триггер сделает всё автоматический. У триггеров есть интересное качество - их можно отключать. Как создать триггер в оракле. Тут не сложно. Вам нужно пролезть в свою схему и вставить код SQL: CREATE TRIGGER...END. Содержимое триггера может быть любым. Их часто используют для увеличения ID (автоинкремента) и для определения времени изменения записи.


/*создание триггера через консоль SQL*/
CREATE TRIGGER схема.таблица_название_триггера
  BEFORE INSERT OR UPDATE ON схема.таблица
  FOR EACH ROW
BEGIN
  :new.changed := sysdate;
END;

/*через редактор*/
TRIGGER схема.название_триггера
  BEFORE INSERT OR UPDATE ON схема.таблица
  FOR EACH ROW
BEGIN
  /*новое значение.changed = системному времени*/
  :new.changed := sysdate;
END;

/*готовый пример*/
TRIGGER scheme1.table_trigger_changed
  BEFORE INSERT OR UPDATE ON схема.таблица
  FOR EACH ROW
BEGIN
  :new.changed := sysdate;
END;

Если вы делаете триггер для увеличения ID на единицу, то в настройках выделите галочкой настройку INSERT. INSERT - эта настройка включает триггер после вставки записи. При изменении записи триггер не сработает. Это важно. Изменений может быть сотня, но создание уникальной записи выполняется чаще всего один раз. Я воспользовался последовательностью SEQUENCES (AUTONUMBER) для создания автоинкремента. О том как содать последовательность читайте в статье: Как создать последовательность SEQUENCES (AUTONUMBER) в Oracle


/*создание триггера через консоль SQL*/
create or replace TRIGGER схема.название_триггера 
before insert on схема.таблица
for each row
begin
  if :new.id is null then
    /*
      SEQ_ID - sequences  последовательность для автонумерации
      nextval - следующее значение. происходит прибавление 1
      id - столбец в таблице
    */
    select SEQ_ID.nextval into :new.id from dual;
  end if;
end;

/*готовый пример*/
create or replace TRIGGER scheme1.name_trigger1
before insert on scheme1.table1
for each row
begin
  if :new.id is null then
    select SEQ_ID.nextval into :new.id from dual;
  end if;
end;

Комментарии

реклама