簡體   English   中英

Oracle SQL:簡單觸發器問題,影響if子句中的值更改

[英]Oracle SQL: Simple Trigger Problem affecting change of values in if clause

我想在具有兩個屬性(座位號和座位類)的表(稱為座位)中創建觸發器。 如果座位高於例如50,則該班級應為“高”,否則應為“低”。 我希望觸發器在輸入數字時自動給班級上課!

看看我到目前為止所得到的,也嘗試了一些替代品..

CREATE TRIGGER trigger_class
AFTER INSERT OR UPDATE ON seat
FOR EACH ROW
BEGIN
IF :NEW.seat_no <=50 THEN :NEW.class_code ='high';
ELSE :NEW.class_code = 'low';
END IF;
END; /

我是數據庫編碼的新手,所以...任何幫助都將是很大的!

將“ =”更改為“:=”,將“ /”放在新行上,將“ AFTER”更改為“ BEFORE”,然后將“ <= 50”更改為“> 50。

CREATE OR REPLACE TRIGGER trigger_class
BEFORE INSERT OR UPDATE ON seat
FOR EACH ROW
BEGIN
IF :NEW.seat_no > 50 THEN :NEW.class_code :='high';
ELSE :NEW.class_code := 'low';
END IF;
END;
/

除了jonearles已經描述的語法問題之外:

除非您只是在玩觸發器(或者這是某種作業),否則這不是一個很好的設計。

關系數據庫中的一條規則是,您不應存儲可以從現有數據派生的信息。

您可以在選擇期間輕松選擇class_code,無需存儲它:

SELECT seat_no, 
       CASE 
         WHEN seat_no > 50 THEN 'high'
         ELSE 'low'
       END as class_code
FROM seat;

使用Oracle 11,您甚至可以定義一個虛擬列,該虛擬列將在檢索期間自動執行“計算”,否則,您可以定義一個視圖以返回該信息。

暫無
暫無

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

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