0
的特定情況下,我有創建表的股票觸發變異表中的SQL用於更新
表的架構如下:
create table stock(item_code varchar2(2) primary key, p_qty number(2),s_qty number(2));
的觸發如下:
CREATE OR REPLACE TRIGGER TR_STOCK BEFORE UPDATE OF S_QTY ON STOCK FOR EACH ROW
DECLARE
V_P STOCK.P_QTY%TYPE;
V_S STOCK.S_QTY%TYPE;
V_I VARCHAR2(2);
BEGIN
V_S:=:NEW.S_QTY;
V_I:=:NEW.ITEM_CODE;
SELECT P_QTY INTO V_P FROM STOCK WHERE ITEM_CODE=V_I;
IF V_S>V_P THEN
RAISE_APPLICATION_ERROR(-20400,'SOLD QTY CANNOT EXCEED PURCHASED QTY...');
END IF;
END;
/
現在,每當我執行更新查詢時,它說該表變異和標誌以下錯誤:
update stock set s_qty=2 where item_code='i4'
*
ERROR at line 1:
ORA-04091: table HR.STOCK is mutating, trigger/function may not see it
ORA-06512: at "HR.TR_STOCK", line 8
ORA-04088: error during execution of trigger 'HR.TR_STOCK'
這個問題有什麼幫助嗎?
您不能從觸發器中更新的表中進行選擇。這可能表明您的數據模型存在缺陷......雖然似乎沒有必要做這樣的事情。你爲什麼不使用'if'語句。 – Ben