gpt4 book ai didi

sql - 在插入第三个表之前,如何使用触发器从两个表中获取日期?

转载 作者:行者123 更新时间:2023-12-02 10:54:33 26 4
gpt4 key购买 nike

我正在尝试创建一个触发器TrgDisAmount,以便从PROD_NAME表中读取PRICEPRODUCT,并为每个插入了DISCOUNTAMOUNT值的新行计算SALES表的SERIALPCODE

这些是表格信息

Table SALES (SERIAL, PCODE, PROD_NAME, PRICE, DISCOUNT, AMOUNT)

Table PRODUCT (PCODE, PROD_NAME, PROD_CAT, PRICE)

Table DISCOUNT (PROD_CAT, DISCOUNT_RATE)

注意:
  • 仅输入SERIALPCODE的值,其余列应仅由触发器TrgDisAmount输入
  • 使用函数DISCOUNT_RATE获取GetDiscount

  • 我已经创建了 GetDiscount函数来从表 DISCOUNT_RATE中获取 DISCOUNT

    这是我的尝试:
    create or replace trigger TrgDisAmount
    before insert on SALES for each row
    begin
    if :new.PCODE = :old.PRODUCT.PCODE then

    :new.PROD_NAME := :old.PRODUCT.PROD_NAME;
    :new.PRICE := :old.PRODUCT.PRICE;
    :new.DISCOUNT := :old.product.PRICE / (GetDiscount(:old.PRODUCT.PROD_CAT));
    :new.AMOUNT := :new.PRICE - :new.DISCOUNT;
    end if;

    insert into SALES columns (PROD_NAME, PRICE, DISCOUNT, AMOUNT)
    values (:new.PROD_NAME, :new.PRICE, :new.DISCOUNT, :new.AMOUNT);
    end;
    /

    当我运行该块时,它向我显示此错误:
    PLS-00049: bad bind variable 'OLD.PRODUCT'

    我使用 Table_Name.Column_name到达特定的列。这样做合法吗?

    样本输出应如下所示:
    SQL> insert into sales values (1,'MB-101',null, null, null, null);

    Result in SALES table:
    SERIAL : 1,
    PCODE : MB-101,
    PROD_NAME : IPHONE 6+,
    PRICE : 250 ,
    DISCOUNT : 25,
    AMOUNT : 225

    最佳答案

    创建插入前触发器时,只需设置:new值。您实际上并没有插入表格。那是处理的下一步。

    另外,在insert触发器中,仅引用:new值,而不是:old。没有:old值,这是您遇到的特定错误。

    然后,您需要执行查询以从其他表中获取相关信息。结果应如下所示:

    create or replace trigger TrgDisAmount
    before insert on SALES
    for each row
    begin
    select p.price / d.discount into :new.discount
    from product p join
    discount d
    on p.prod_cat = d.prod_cat
    where :new.pcode = p.pcode;
    :new.AMOUNT := :new.PRICE - :new.DISCOUNT;
    end;

    定义折扣的算法看起来非常可疑。使用此方法,将有10%的折扣表示为1.11。但是,这是您问题中的算法,您没有提供示例数据来建议任何其他方法。

    关于sql - 在插入第三个表之前,如何使用触发器从两个表中获取日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30953917/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com