2012-03-05 3 views
-1

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

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?

ошибка ...

Error (2,27): PLS-00103: Обнаружен символ "FROM", когда ожидает одно из следующих действий:), * & = - + < /> в in is mod осталось не rem => <> or! = или ~ => = < = <> и/или подобный подобный2 подобный4 likec как между || мультимножеством член submultiset

+0

Вы пробовали 'IF EXISTS (SELECT SUM (NUMBER_OF_CREDITS) ...' –

+0

Тогда я попадаю ... Ошибка (2,66): PLS-00103: встречается символ «ПРИСОЕДИНЯЙСЯ» при ожидании одного из следующего:), с группой, пересекающей минус объединение пуска, где подключается –

+0

возможный дубликат [Состояние триггера во всех строках] (http: // stackoverflow.com/questions/9455690/trigger-condition-in-all-rows) – APC

ответ

0

Вы можете попробовать 'перефразируя' ваше состояние так:

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 
    … 
Смежные вопросы