【发布时间】:2021-02-04 04:01:27
【问题描述】:
我创建了一个存储过程,我希望将也是一个触发器的总计列添加到 FinalTotal。 代码:
程序FINAL_TOTAL:
create procedure FINAL_TOTAL(C IN NUMBER,T OUT NUMBER)
IS
BEGIN
UPDATE Products
SET FinalTotal = SUM(Total),
HAVING ProdCustId = C;
Commit;
SELECT SUM(FinalTotal) into T FROM Products WHERE ProdCustId = C;
END;
/
在这里,如果我写 WHERE 而不是 HAVING 那么,它仍然给我同样的错误。
触发Total:
CREATE TRIGGER PROD_TOTAL
AFTER INSERT ON Products
BEGIN
UPDATE Products
SET Total = ProdPrice * ProdQuantity;
END;
/
表Products;
create table Products
( ProdId number primary key,
ProdNum number not null unique,
ProdName varchar2(15),
ProdPrice int,
ProdQuantity int,
Total int,
FinalTotal int,
ProdCustId int references Customers,
ProdOrdId int references Orders,
ProdStoreId int references Stores
);
错误: 5/18 PL/SQL: ORA-00934: group function is not allowed here.
由于我是初学者,所以我没有那么多想法,所以如果有人知道为什么会发生这种情况,请告诉我!!
【问题讨论】:
-
如果我写 WHERE 而不是 HAVING 那么它仍然给我同样的错误:显然,将 HAVING 用于 UPDATE 语句是不合适的,即使你想使用 WHERE ,然后需要删除那里的逗号,这是一个错字。顺便说一句,保留
Total和FinalTotal值在设计上是不正确的,这些值可以在需要时从现有值中计算出来。 -
@BarbarosOzhan 如果您知道“设计此程序的正确方法是什么?”那么请让我知道,而且,在删除逗号后,我得到了同样的错误。所以请帮帮我!!
标签: oracle stored-procedures plsql