【问题标题】:Update the table using triggers使用触发器更新表
【发布时间】:2014-04-18 10:50:52
【问题描述】:

每当 product_inv 更新但我的代码没有运行时,我都会尝试更新产品表。请帮我解决这个问题

create table Product
(           
       P_ID varchar2(10) constraint cat_pk PRIMARY KEY,
       P_name varchar2(15) constraint Cat_unqnn UNIQUE NOT NULL,
       P_Brand varchar2(15) CHECK(P_Brand IN('Yes', 'No')),
       P_Cost varchar2(6),
       P_qty number      
);

insert into product values('10',  'Coke', 'Yes', '34', '8');
insert into product values('20', 'Pepsi', 'No', '25', '6');


create table Product_Inv
(    
       P_ID varchar2(5) REFERENCES Product(P_ID),           
       Rate varchar2(5) constraint prodcut_rate_nn NOT NULL,           
       Qty number constraint prodcut_qty_nn NOT NULL,
       Discount varchar2(15),
       Lot_ExpiryDate varchar2(10)         
);

create or replace trigger Product
AFTER insert or update or delete on Product_Inv
for each row

begin
  UPDATE Product
       SET p_qty = p_qty + new.Qty 
       WHERE p_id = new.p_id; 

end;

在此插入后,项目 10 将是先前的 8 + 此 9 ,但有一些错误。

 insert into Product_inv values('10', '25', '9', '25', '19-8-2014');

【问题讨论】:

  • 插入 Product_inv 后,您在产品表中得到了什么?
  • 触发器无效,重新验证失败!!
  • @llesh 什么都没有!!只是上面提到的错误
  • 我不确定这是否会产生错误,但首先更改您的触发器名称,因为您的表名称和触发器名称都相同。第二,当你传递数值而不是不带引号写它们。
  • 无关但善意的建议:请重新考虑您的一些数据类型

标签: sql oracle triggers


【解决方案1】:

您的问题出在触发代码中: 您必须在 new 前面使用“:”。

所以代替这部分代码:

 UPDATE Product
       SET p_qty = p_qty + new.Qty 
       WHERE p_id = new.p_id; 

你需要把这部分:

 UPDATE Product
       SET p_qty = p_qty + :new.Qty 
       WHERE p_id = :new.p_id; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多