【问题标题】:Update Query with Trigger使用触发器更新查询
【发布时间】:2012-11-16 04:33:47
【问题描述】:

我有 2 张桌子,即 (1)Return_Invoice 和 (2)product_warehouse 。一旦我在Return_Invoice 表数量列中输入数据,我想更新Product_warehouse 中使用的数量列,即当我在Return_Invoice 表中的Quantity 列中输入值时,quantity 应该从@987654329 减去Product_Warehouse 表中的@ 列。对此的任何查询或触发器。

我尝试了以下查询,但它不起作用。

update product_warehouse 
set Product_Warehouse.Quantity = Product_Warehouse.Quantity - Return_Invoice.Quantity
where (Product_Warehouse.item_code = Return_Invoice.item_code) 

【问题讨论】:

  • 这种情况下一定要使用TRIGGER吗?您可以为此使用查询吗?
  • 由你决定..如果你知道查询我可以在触发器中调整它

标签: sql plsql oracle11g sqlplus oracle-apex


【解决方案1】:

请检查给定的触发器是否是您的要求:

create or replace
TRIGGER "WR_RETURN_INVOICE_UPDATE_TRG" 
AFTER UPDATE ON RETURN_INVOICE
FOR EACH ROW
  BEGIN
    UPDATE PRODUCT_WAREHOUSE
    SET QUANTITY=QUANTITY-:OLD.QUANTITY
    WHERE ITEM_CODE=:OLD.ITEM_CODE;   
END WR_RETURN_INVOICE_UPDATE_TRG;

【讨论】:

    【解决方案2】:

    将您的商品代码放在需要的地方

        Create TRIGGER anUpdate ON dbo.Return_Invoice
    After Insert
    AS
    declare @qty int
    set nocount on
    
    BEGIN
        set @qty= (Select RI.quantity FROM Return_Invoice RI where Item_code=yourcode)
        Update Product_Warehouse set  Quantity=Quantity-@qty where  Item_code=yourcode
    END
    GO
    

    【讨论】:

    • item_code 是表之间的关系键。所以当你更新你的“Return_Invoice”表时,如果你想在“product_warehouse”中触发,你必须知道item_code
    • 这个问题被标记为 Oracle。这不是 Oracle 语法。
    • @Ben.. 我正在 Oracle Apex 中执行此查询...所以这就是我标记 Oracle 的原因
    猜你喜欢
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多