ORACLE TRIGGER创作

时间:2014-01-03 02:36:55

标签: sql oracle datatrigger

您好我在执行此触发器时遇到问题,即在表格中插入或修改之前MATIERES检查MATIERES中的小时数是否大于MODULES的小时数...如果是这种情况我必须提出异常......任何人都可以帮助我

CREATE OR REPLACE VerifNbrHeureMat
BEFORE INSERT OR UPDATE ON MATIERES
  FOR EACH ROW
    DECLARE
    D_EXCEPTION EXCEPTION
  BEGIN
    IF(:New.NBRHEURE_MAT > (Select nbr_heure FROM MODULES where (id_module=:New.ID_MODULE));)
        RAISE D_EXCEPTION
    END IF
  EXCEPTION
        WHEN D_EXCEPTION THEN
            RAISE_APPLICATION_ERROR(-20000,'Nbr heure matière Supérieur à Nbr Heure Module');
  END;

2 个答案:

答案 0 :(得分:0)

您可以使用SELECT INTO

执行以下操作
CREATE OR REPLACE VerifNbrHeureMat
BEFORE INSERT OR UPDATE ON MATIERES
FOR EACH ROW
DECLARE
D_EXCEPTION EXCEPTION;
l_nbr_heure  NUMBER;
BEGIN
  Select nbr_heure into l_nbr_heure FROM MODULES 
  where id_module=:NEW.ID_MODULE;
IF(:NEW.NBRHEURE_MAT > l_nbr_heure)
Then
    RAISE D_EXCEPTION;
END IF;
EXCEPTION
    WHEN D_EXCEPTION THEN
        RAISE_APPLICATION_ERROR(-20000,'Nbr heure matière Supérieur à Nbr Heure Module');
END;

答案 1 :(得分:0)

试试这个,

CREATE OR REPLACE TRIGGER VerifNbrHeureMat
BEFORE INSERT OR UPDATE ON MATIERES
FOR EACH ROW
DECLARE
     l_hour modules.nbr_heure%TYPE;
BEGIN
     SELECT nbr_heure 
     INTO   l_hour
     FROM   modules 
     WHERE  id_module = :NEW.ID_MODULE;

     IF :NEW.NBRHEURE_MAT > l_hour THEN
          RAISE_APPLICATION_ERROR(-20000, 'Nbr heure matière Supérieur à Nbr Heure Module');
     END IF;
END;