2014-11-15 2 views
0
CREATE OR REPLACE TRIGGER verifier_salle_pavillon 
AFTER INSERT OR UPDATE ON Salle 
FOR EACH ROW 
BEGIN 
IF (:NEW.id_salle = (select * 
        from Salle 
        where id_pavillon = :OLD.id_pavillon;)) 
THEN 
DELETE FROM Salle 
WHERE id_salle = :NEW.id_salle; 
END IF; 
END; 
/

И я получаю эту ошибку:SQL PLS-00103 ошибки код

4/42  PLS-00103: Encountered the symbol ";" when expecting one of the 
following: 
. () * @ % & - +/at mod remainder rem with <exposant (**)> 
and or group having intersect minus start union where connect 
|| indicator multiset 
The symbol ";" was ignored. 

Ошибка находится в строке 4? Что случилось с BEGIN?

Что не так с этим триггером? Я просто хочу удалить строку, когда уже есть строка с одинаковыми id_pavillon и id_groupe.

ответ

1

Проблема синтаксического анализа является точка с запятой в этой части:

IF (:NEW.id_salle = (select * 
        from Salle 
        where id_pavillon = :OLD.id_pavillon;)) 
--------------------------------------------------------^ 

я должен сказать: «первая проблема». Код = (select * является весьма неортодоксальным и, скорее всего, вызывает ошибки.

Вы можете написать это без if:

DELETE FROM Salle 
WHERE id_salle = :NEW.id_salle AND 
     EXISTS (SELECT 1 FROM Salle WHERE id_pavillon = :OLD.id_pavillon); 

Это может потребовать еще одно условие, в зависимости от того, что вы собираетесь оригинальным if состоянии.

+0

Большое спасибо! Это было очень полезно! – user3380481

Смежные вопросы