首页 > 解决方案 > 如何在也存在触发器的表中插入?

问题描述

在过去的几天里,我正在研究我的 SQL 项目“超市计费管理系统”,在这里我在创建这个项目时遇到了很多障碍。由于我是初学者,我无法解决所有问题,所以请帮助我!这是我的疑问:我创建了一个名为“Payments”的表,在其中,我什至创建了一个触发器和一个过程,现在由于触发器和过程,我不知道如何在 Payments 表中插入值。并且我想要这样一个程序,可以将一个人的产品价格加起来并存储到Final Total中,我不确定我的程序代码是否正确,但它已成功创建。因此,如果我的程序代码有任何问题,请告诉我,也请通过举例告诉我如何插入它

支付网络表:

create table Paymnets
  (
  PayId int primary key, PayDate date, 
  ProdTotal int, 
  FinalTotal int, 
  PayOrdId int references orders, 
  PayProdId int references Products, 
  PayCustId int references Customers
  );

产品表:

create table Products (
  ProdId number primary key, 
  ProdNum number not null unique, 
  ProdName varchar2(15), 
  ProdPrice int, 
  ProdQuantity int, 
  ProdCustId int references Customers, 
  ProdOrdId int references Orders, 
  ProdStoreId int references Stores
);

程序 :

create procedure FINAL_TOTAL(C IN NUMBER, T OUT NUMBER) IS BEGIN 
UPDATE 
  Payments 
SET 
  FinalTotal = FinalTotal + ProdTotal 
WHERE 
  PayCustId = C;
Commit;
SELECT 
  FinalTotal into T 
FROM 
  Payments 
WHERE 
  PayCustId = C;
END;
/

扳机:

create trigger PROD_TOTAL
    AFTER INSERT ON Products
    BEGIN
    UPDATE Paymnets 
    SET ProdTotal = (SELECT Products.ProdPrice * Products.ProdQuantity FROM Products);
    END;
    /

插入语句:

insert into Payments values(1,'2020-10-07',1,1,1);

好吧,在插入这么多值之后,我知道我会得到一个错误,所以我得到了:

错误:没有足够的值

在这里我想知道,如何在支付表中插入值,如果我的程序代码错误,那么我应该写什么?所以请帮助我解决这些问题!

标签: oracletriggersprocedure

解决方案


推荐阅读