ORA-04088 и ORA-06512 - PullRequest
       2

ORA-04088 и ORA-06512

1 голос
/ 14 марта 2012

При использовании этого кода запуска:

CREATE TRIGGER Verify_deathDate 
BEFORE INSERT Or UPDATE of deathDate, birthDate on Actor 
FOR EACH ROW 
BEGIN 
IF (:NEW.deathDate < :NEW.birthDate) THEN 
    Raise_application_error(-20000, 'birthDate should be before deathDate'); 
END IF; 
END; 
/ 

, а затем этот запрос на обновление:

UPDATE Actor SET deathDate = '28-Dec-1937' , birthDate = '29-Dec-1938' 
WHERE actorID = '00069';

Я получаю следующие коды (правильный только один):

ORA-20000: birthDate should be before deathDate
ORA-06512: at "OPS$U0853885.CHECK_DEATHDATE", line 3
ORA-04088: error during execution of trigger 'OPS$xxxxxxxx.CHECK_DEATHDATE'

1 Ответ

4 голосов
/ 14 марта 2012

Oracle рекомендует использовать триггеры для ограничения данных только в тех случаях, когда вы не можете использовать (среди прочего) ограничения CHECK. Поскольку на самом деле это проще , вам, вероятно, следует использовать это в этом случае;

CREATE TABLE Actor (
  id int, 
  name varchar(32), 
  birthdate date, 
  deathdate date, 
  CONSTRAINT birth_death CHECK (deathdate > birthdate)
);

Это обеспечит соблюдение вашего бизнес-правила без дополнительного триггера.

Демо здесь .

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