0
我遇到以下觸發器問題。Oracle觸發器未讀取
這是我的程序計數訪問一個頁面:
create or replace procedure VisitSport(idN in number)
is
v1 number := idN;
vc number;
begin
select s.VISITAS into vc from Sports s where s.IDSPORTS=v1;
update Sports set VISITAS = vc +1 where IDSPORTS=v1;
end;
這走的是得分
create or replace PROCEDURE RankingSports(vnumber in number, vid in number)
is
v1 number := vnumber;
v2 number := vid;
v3 number;
begin
select CNT into v3 from SPORTS where IDSPORTS = v2;
update SPORTS set CNT= v3+v1 where IDSPORTS = v2;
end;
這是我的觸發器,使操作來計算排名
create or replace trigger trg_RankingSp
after insert or update on Sports
for each row
begin
update SPORTS set RANKING = visitas/cuenta;
end;
這是我在觸發器執行時得到的錯誤。
觸發器(或在此 語句中引用一個用戶定義的功能PLSQL)試圖看(或修改)的表中的,通過該發射它的語句被修改中間呈 。 *操作:重寫觸發器(或函數),使其不讀取該表。
SPORTS表中的CNT列實際上被稱爲CUENTA – Anthony
您可以給出'Sports'表的樣本數據,以及插入或更新後的期望值,顯示一些示例。 – Utsav
基本答案是「您無法運行觸發器來更新觸發器所基於的表格。」這被稱爲變異表錯誤。通過使用「:new.ranking:=:new.visitas /:new.cuenta」來發布答案的人是正確的,他也是正確的,你必須在分配之前做if語句,因爲如果cuenta爲零,你將會有一個0/null的問題。 –