Sql 从不同的表创建触发器
我有一个名为Sql 从不同的表创建触发器,sql,oracle,database-trigger,Sql,Oracle,Database Trigger,我有一个名为M\u InventoryLine M_InventoryLine M_Product_ID || QtyEntered 101 || 50 M_Replenish M_Product_ID || Level_Min 101 || 20 VW_DaftarBarang_Available M_Product_ID || Available 101 || 35 QtyEntered不能超过
M\u InventoryLine
M_InventoryLine
M_Product_ID || QtyEntered
101 || 50
M_Replenish
M_Product_ID || Level_Min
101 || 20
VW_DaftarBarang_Available
M_Product_ID || Available
101 || 35
QtyEntered
不能超过可用的+级别_Min
因此,我需要在触发器中引发应用程序错误
我试过这样扣扳机:
CREATE OR REPLACE TRIGGER SAVE_ERROR
BEFORE INSERT OR UPDATE ON M_INVENTORYLINE
FOR EACH ROW
DECLARE
AVAILABLE_ST NUMBER;
MIN_LEVEL NUMBER;
BEGIN
SELECT AVAILABLE INTO AVAILABLE_ST
FROM vw_daftarbarang_available
where m_product_id = :new.m_product_id;
SELECT LEVEL_MIN INTO MIN_LEVEL
FROM M_REPLENISH
WHERE M_PRODUCT_ID = :NEW.M_PRODUCT_ID;
IF :NEW.QTYENTERED > :OLD.AVAILABLE + :OLD.MIN_LEVEL THEN
RAISE_APPLICATION_ERROR(-20000,'QUANTITY IS NOT ENOUGH');
END IF;
END;
但它不起作用。有任何使触发器成功的建议吗?编辑您的触发器:
CREATE OR REPLACE TRIGGER SAVE_ERROR
BEFORE INSERT OR UPDATE ON M_INVENTORYLINE
FOR EACH ROW
DECLARE
AVAILABLE_ST NUMBER;
MIN_LEVEL NUMBER;
BEGIN
SELECT AVAILABLE INTO AVAILABLE_ST FROM vw_daftarbarang_available
where m_product_id = :new.m_product_id;
SELECT LEVEL_MIN INTO MIN_LEVEL FROM M_REPLENISH
WHERE M_PRODUCT_ID = :NEW.M_PRODUCT_ID;
IF :NEW.QTYENTERED > AVAILABLE_ST + MIN_LEVEL
THEN RAISE_APPLICATION_ERROR(-20000,'QUANTITY IS NOT ENOUGH');
END IF;
END;
你有什么错误吗?您是否插入了调试打印以查看正在执行的语句?我已经通过SQLPlus运行了它,它显示表或视图不存在。。但是我已经制作了所有的表和视图。“插入调试打印”是什么意思?很抱歉我是新手…谢谢@Vance成功创建了触发器。但是,当我执行的时候,它表示错误如下:ORA-01422:exact fetch返回的行数超过请求的行数。
我如何找到错误原因并解决它?这意味着从vw\u daftarbarang\u AVAILABLE/M\u Refuncy表中提取的可用或级别\u MIN不止一个,并且插入了新的M\u PRODUCT\u ID。在你们的表格中是否有一个可用的和LEVEL_MIN可以存在不止一次的情况?啊,我明白了<应根据M\u fully
和VW\u DaftarBarang\u Available
中的M\u Warehouse\u ID
选择code>M\u Product\u ID
,以使其具有一条记录。我的触发器位于M\u库存行
同时M\u仓库ID
位于M\u库存
<代码>M_Inventory
和M_Inventory line
通过M_Inventory\u ID
连接,如何修改触发器,以便可以在带有M_Warehouse\u ID的触发器中添加位置
?您要将M_Warehouse\u ID设置在哪里?我的意思是,如果where子句中的m_product_id依赖于:NEW.m_product_id,那么m_Warehouse_id依赖于什么?