Проверьте значение перед удалением триггера оракула, а затем вставьте в другую таблицу - PullRequest
0 голосов
/ 09 сентября 2011

В настоящее время у нас есть триггер на tbl_number.Это выглядит следующим образом:

create or replace TRIGGER TRIGGER_EXAMPLE
BEFORE DELETE
ON TBL_NUMBER
FOR EACH ROW
BEGIN


-- Insert record into TBL_NUMBER _DUMMY table
INSERT INTO TBL_NUMBER _DUMMY
 ( NAME, NO_OF_PEOPLE)
  VALUES
 ( :old.NAME, :old.NO_OF_PEOPLE)
 END;

Теперь мы хотим изменить триггер и проверить значение NO_OF_People в исходной таблице tbl_number, а если оно равно (-1), мы хотим поместить 0 (или ноль) в столбец NO_of_People изтаблица tbl_number_dummy.

Любые указатели для этого будут оценены.

Спасибо, -Adi

1 Ответ

2 голосов
/ 09 сентября 2011
INSERT INTO TBL_NUMBER_DUMMY
 ( NAME, NO_OF_PEOPLE)
  VALUES
 ( :old.NAME, decode(:old.NO_OF_PEOPLE, -1, 0, :old.NO_OF_PEOPLE)
 END;

Или, если вы хотите вставить в TBL_NUMBER _DUMMY, только если NO_OF_PEOPLE = -1,

CASE WHEN :old.NO_OF_PEOPLE = -1 THEN
INSERT INTO TBL_NUMBER _DUMMY
 ( NAME, NO_OF_PEOPLE)
  VALUES
 ( :old.NAME, :old.NO_OF_PEOPLE)
ELSE null;
END;

ОБНОВЛЕНИЕ (ответ на комментарий):

INSERT INTO TBL_NUMBER_DUMMY
 ( NAME, NO_OF_PEOPLE)
  VALUES
 ( :old.NAME, case when :old.NO_OF_PEOPLE < 0 then 0; else :old.NO_OF_PEOPLE; end)
 END;

или,с декодированием

INSERT INTO TBL_NUMBER_DUMMY
 ( NAME, NO_OF_PEOPLE)
  VALUES
 ( :old.NAME, decode(sign(:old.NO_OF_PEOPLE), -1, 0, :old.NO_OF_PEOPLE)
 END;

:)

И да, вы можете вставить ноль в числовой столбец, за исключением ситуации, когда столбец имеет значение NOT NULL.ограничение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...