簡體   English   中英

在 Oracle SQL 開發者中創建觸發器

[英]Create Trigger in Oracle SQL Developer

我想在 Oracle SQLDeveloper 上創建一個觸發器。

如果成績列中的數據低於 4.0,也就是 5.0/6.0(德國評分系統),觸發器應該只允許“考試”表中的“成績”列隨后被更改。

如果等級列中的數據為 1.0/2.0/3.0/4.0,則觸發器應拒絕更改。

因此,觸發器應檢查等級是低於還是高於 4.0,並基於此,允許或拒絕對現有表數據的更改。

我的主要問題是我不太了解為 Oracle SQL 開發人員創建觸發器的語法。 創建約束似乎很容易,但觸發器讓我感到困惑。

我試圖開始工作的解決方案:

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;

作品。

小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM