ошибка ограничения триггера sql oracle? - PullRequest
0 голосов
/ 05 марта 2012

Я получаю сообщение об ошибке при попытке скомпилировать следующий триггер ...

CREATE OR REPLACE TRIGGER DegreePart_CreditsMax
BEFORE INSERT OR UPDATE ON DEGREE_MODULE
FOR EACH ROW
BEGIN
IF(SUM(NUMBER_OF_CREDITS) FROM DEGREE_MODULE INNER JOIN MODULE ON DEGREE_MODULE.MODULE_ID = MODULE.MODULE_ID
        WHERE OPTIONAL = 'N' AND DEGREE_ID = :NEW.DEGREE_ID > 120)
THEN
RAISE_APPLICATION_ERROR( -- Error Message
-20001, 
'Degree must not contain compulsary modules worth over 120 credits.' );
END IF;
END;
/

Я пытаюсь проверить, что при добавлении модуля сумма всех текущих обязательных модулей для этой степени плюсновый модуль меньше 120 ???

ошибка ...

ошибка (2,27): PLS-00103: обнаружен символ "ОТ" при ожиданиииз следующего:), * & = - + </> at in - это остаток от мода, а не rem => <> или! = или ~ => = <= <> и подобные like2 like4 likec между ||член мультимножества submultiset

1 Ответ

0 голосов
/ 05 марта 2012

Вы можете попытаться «перефразировать» ваше состояние следующим образом:

IF EXISTS (
  SELECT SUM(NUMBER_OF_CREDITS)
  FROM DEGREE_MODULE
    INNER JOIN MODULE ON DEGREE_MODULE.MODULE_ID = MODULE.MODULE_ID
  WHERE OPTIONAL = 'N' AND DEGREE_ID = :NEW.DEGREE_ID
  HAVING SUM(NUMBER_OF_CREDITS) > 120
)
THEN
  …
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...