Triggers Oracle sql在插入/更新时触发以计算2个值并更新第三个值

Triggers Oracle sql在插入/更新时触发以计算2个值并更新第三个值,triggers,oracle-sqldeveloper,Triggers,Oracle Sqldeveloper,我想创建一个触发器,通过计算2个值来更新行,并更新第三个值: CREATE TABLE Customers ( Cust_ID INTEGER PRIMARY KEY, Dates TIMESTAMP WITH LOCAL TIME ZONE, Quantity dec(7,2) NOT NULL, Price_per_item dec(7,2) NOT NULL, Total_price dec(7,2) ); 我已经这样做了: CREATE OR R

我想创建一个触发器,通过计算2个值来更新行,并更新第三个值:

CREATE TABLE Customers (
    Cust_ID INTEGER PRIMARY KEY,
    Dates TIMESTAMP WITH LOCAL TIME ZONE,
    Quantity dec(7,2) NOT NULL,
    Price_per_item dec(7,2) NOT NULL,
    Total_price dec(7,2)
);
我已经这样做了:

CREATE OR REPLACE TRIGGER cust_after_insert AFTER INSERT 
ON Customers
FOR EACH ROW
BEGIN
    UPDATE Customers
    SET 
    DATES = CURRENT_TIMESTAMP,
    Total_price = Quantity * Price_per_item;
END;
我遇到了一些错误,我试图同时查看和编辑表

我也试过:

CREATE SEQUENCE cust_Seq START WITH 1 INCREMENT BY 1;
CREATE OR REPLACE TRIGGER cust_trig BEFORE INSERT ON Customers
FOR EACH ROW
BEGIN
  SELECT cust_Seq.nextval INTO :new.Fuel_ID FROM dual;
  SELECT CURRENT_TIMESTAMP INTO :new.DATES FROM dual;
  SELECT Quantity * Price_per_item INTO :new.Total_price FROM dual;
END;
/

我更喜欢第二种选择,如果更新也会发生,我需要一些东西。

第二种方法方向正确,但需要一些调整来处理总价计算和处理更新:


你会犯什么错误?某些类型的错误无助于调试问题。谢谢这是完美的,只是一个小的打字结束我需要的是结束,如果,谢谢@阿提拉:谢谢你注意到终端ID的错误-修正了。
CREATE SEQUENCE cust_Seq START WITH 1 INCREMENT BY 1;
CREATE OR REPLACE TRIGGER cust_trig BEFORE INSERT OR UPDATE ON Customers
FOR EACH ROW
BEGIN
  IF INSERTING THEN
    SELECT cust_Seq.nextval INTO :new.Fuel_ID FROM dual;
    SELECT CURRENT_TIMESTAMP INTO :new.DATES FROM dual;
  END IF;
  :new.Total_price :=  :new.Quantity * :new.Price_per_item;
END;
/