2014-10-04 48 views
2

我正在使用Oracle Apex。 我需要創建一個觸發器來檢查no。的股票是否< 0. 如果沒有。的股票< 0然後插入操作停止然後提示一條警告消息給用戶。 以下編碼不起作用。我的代碼有什麼問題?請幫忙。如何在觸發器中停止插入操作

我的編碼:

CREATE OR REPLACE TRIGGER cw_service_b4_trigger 
BEFORE INSERT ON cw_serviceline 
FOR EACH ROW 

DECLARE 

exist_stock number; 

BEGIN 
    select stock into exist_stock from cw_inventory where inv_id = :new.inv_id; 
     if (exist_stock - :new.quantity) < 0 then 
     dbms_output.put_line ('Out of Stock'); 
     return; 
     end if; 
END; 
/
+0

請擴大'不起作用'。你有錯誤(張貼它)還是它什麼都不做(解釋你期望的) – 2014-10-04 04:12:35

+0

cw_inventory表的數量列配置爲不允許<0.當我按APEX上的應用更改。顯示以下消息:發生了1個錯誤 ORA-02290:檢查約束(LECTURE_6.CH_STOCK)違反了ORA-06512:在「LECTURE_6.CW_INVENTORY_SERVICE_TRIGGER」第3行ORA-04088:執行觸發器'LECTURE_6.CW_INVENTORY_SERVICE_TRIGGER'時出錯(行3)。它似乎試圖插入。 – 2014-10-04 04:21:22

回答

4

您還沒有拋出任何類型的錯誤。你所有的觸發器都會輸出一條消息。

return不會導致INSERT停止,它只會導致觸發器邏輯返回。

相反,您需要引發錯誤以導致插入失敗。

if exist_stock < :new.quantity then 
    raise_application_error(-20000, 'Out of stock'); 
end if; 
+0

它的工作原理。非常感謝。 – 2014-10-04 04:40:06