我要實現以下觸發:變異表 - 觸發錯誤
票的總數,每個大選年,選舉的1960年後,不超過538
然而,我得到了突變表錯誤。我明白爲什麼我會得到這個錯誤,但我看不到另一個解決方案(帶觸發器)。我可以創建一個臨時表,但我只想要觸發器。 這裏是代碼:
CREATE OR REPLACE TRIGGER restrict_election_votes
after INSERT OR UPDATE ON election
for each row
declare
v_nbofvotes number;
v_eleyr election.election_year%type :=:NEW.election_year;
v_votes election.votes%type :=:NEW.VOTES;
begin
select sum(votes)
into v_nbofvotes
from election
where election_year=v_eleyr;
if(v_votes+v_nbofvotes >538)
THEN
RAISE_APPLICATION_ERROR(-20500, 'Too many votes');
END IF;
END;
update election
set votes=175
where candidate='MCCAIN J'
and election_year=2008;
如果刪除了「每一行」,並使它成爲一個語句級觸發器(將不得不更改查詢,爲所有選舉檢查和規則(票)自1960年以來,你不知道是什麼行被插入/更新),那麼它應該工作。 –
我認爲這裏的問題不是「爲每一行」而是從本身選擇。只要刪除選擇語句,我不認爲你真的需要在那裏:所有你需要的是檢查:NEW.VOTES。 – stee1rat
'在INSERT或UPDATE ON選舉前創建或更換觸發器restrict_election_votes 聲明 v_nbofvotes數字; begin select sum(votes) into v_nbofvotes from election where election_year> 1960;如果(v_nbofvotes>(538 *((extract(from sysdate)) - 1960))) THEN RAISE_APPLICATION_ERROR(-20500,'Too many votes'); END IF; END;'仍然沒有工作 – MonicaS