在Oracle SQL Developer中创建触发器



我想在Oracle SQLDeveloper上创建一个触发器。

如果成绩列中的数据低于4.0,即5.0/6.0(德国评分系统),则触发器应该只允许更改'考试'表中的'grade'列。

如果分数列中的数据是1.0/2.0/3.0/4.0,触发器应该拒绝修改。

所以触发器应该检查分数是低于还是高于4.0,并基于此,允许或拒绝对现有表数据的修改。

我的主要问题是,我不太了解Oracle SQL Developer的触发器创建语法。创建约束似乎很容易,但触发器让我困惑。

解决方案我正在努力工作:

CREATE OR REPLACE TRIGGER KlausurWiederholung
BEFORE UPDATE OF Note ON Prüfen
FOR EACH ROW
BEGIN 
IF NEW.Note > OLD.Note THEN UPDATE Prüfen
END IF;
END

所以,如果有人能解释或链接一个有用的例子,如何正确地构建我的触发器,这将是非常感激的。

您想使用:OLD:NEW来引用更新前后的行记录,如果更新无效,那么您想引发异常(并且您需要;作为最终END的语句终止符,并在新行上终止/的PL/SQL块):

CREATE OR REPLACE TRIGGER KlausurWiederholung
BEFORE UPDATE OF Note ON Prüfen
FOR EACH ROW
BEGIN 
IF :OLD.Note <= 4.0 THEN
RAISE_APPLICATION_ERROR(-20000, 'Grade too high to update.');
END IF;
END;
/
然后,对于样本数据:
CREATE TABLE Prüfen (id, note) AS
SELECT  1, 1   FROM DUAL UNION ALL
SELECT  2, 1.2 FROM DUAL UNION ALL
SELECT  3, 2   FROM DUAL UNION ALL
SELECT  4, 2.5 FROM DUAL UNION ALL
SELECT  5, 3   FROM DUAL UNION ALL
SELECT  6, 4   FROM DUAL UNION ALL
SELECT  7, 4.4 FROM DUAL UNION ALL
SELECT  8, 5   FROM DUAL UNION ALL
SELECT  9, 5.7 FROM DUAL UNION ALL
SELECT 10, 6   FROM DUAL UNION ALL
SELECT 11, 6.3 FROM DUAL;

:

UPDATE Prüfen
SET   note = 1
WHERE id = 2;

给出异常:

ORA-20000: Grade too high to update.
ORA-06512: at "FIDDLE_DPBZKTZLAVYIZCPLKBSE.KLAUSURWIEDERHOLUNG", line 3
ORA-04088: error during execution of trigger 'FIDDLE_DPBZKTZLAVYIZCPLKBSE.KLAUSURWIEDERHOLUNG'

但:

UPDATE Prüfen
SET   note = note + 4
WHERE note > 4;

小提琴

最新更新