【问题标题】:Create a trigger for discount创建折扣触发器
【发布时间】:2017-02-06 14:33:40
【问题描述】:

我想创建一个触发器,该触发器将根据餐桌观众的折扣将餐桌票中的价格更新到餐桌票中。但是我在插入时遇到错误

桌票:

create table Ticket(
Ticket_ID integer not null,
Class_Name varchar(50),
Payment_Method varchar(60),
Audience_ID integer,
Seating_Number varchar(20),
Price integer,

primary key(Ticket_ID),
foreign key(Class_Name) references Class)
foreign key(Audience_ID) references Audience,
foreign key(Seating_Number) references Seating);

餐桌观众

CREATE TABLE AUDIENCE
(Audience_ID integer not null,
 Audience_Age integer,
 Audience_Type varchar (50),
 Discount Decimal(7,2),
 Primary key (Audience_ID)
 );



CREATE Trigger Audience_Type
    AFTER INSERT ON AUDIENCE
    FOR EACH ROW MODE DB2SQL
        UPDATE AUDIENCE
        SET Audience_Type = (SELECT Price FROM TICKET) &&
        (Price-(Price*Discount))
        WHERE AUDIENCE.Discount = TICKET.Price 

【问题讨论】:

  • 什么错误?看不到任何错误。

标签: sql db2 database-trigger


【解决方案1】:

您不是在更新 Ticket 表,而是在更新 Audience 表。 试试看:

CREATE Trigger T_name
AFTER INSERT ON AUDIENCE
FOR EACH ROW MODE DB2SQL
    UPDATE Ticket   -- here you should update Ticket table 
    SET price = Price-(Price*:new.Discount)
    WHERE ticket.AUDIENCE_id= AUDIENCE.AUDIENCE_id

使用触发器时,请阅读一些关于 :new 和 :old 的信息。此外,如果您更新观众表,这不会更新工单表。你可以说“插入或更新后……”

【讨论】:

  • AUDIENCE.DISCOUNT" 在使用它的上下文中无效 -- 出现此错误
  • 尝试将价格更新为例如100 (... SET price = 100 ...),看看是否成功
  • 现在它在我从 AUDIENCE.AUDIENCE_id 中删除 AUDIENCE 后工作,但它显示错误的值,它计算所有值(它应该评估受众类型仅为学生的位置)。跨度>
  • 请注意,我也将折扣从 Int 更改为 decimal
猜你喜欢
  • 2011-11-08
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 2017-11-30
相关资源
最近更新 更多