为什么会遇到PL / SQL:ORA-00933:SQL命令未正确结束?

问题描述 投票:0回答:1

我正在尝试在表DRIVER上创建一个将自动更新列的触发器] totaltripsmade。当行程记录插入到我的表TRIP中时,触发器将触发。

首先,我有一组旅行记录。我正在考虑在TRIP的Licence#上使用count(*)更新驱动程序中的totaltripmade,因为两个表都具有Licence#

下面是我的代码

create or replace trigger UpdateTTM 
  after insert on trip 
  for each row 

BEGIN
  LOOP 
  UPDATE DRIVER     
  SET totalTripMade = (select Lic# as L, count (*) as TTM FROM TRIP GROUP BY Lic# HAVING Lic# = Lic#)
  WHILE Lic# = L;
  END LOOP; 

end UpdateTTM;
/

我对SQL还是很陌生,我不确定为什么我会遇到此SQL命令错误未正确结束的错误。我希望那里有人可以指导我解决这个问题。谢谢。

oracle plsql database-trigger
1个回答
0
投票

您会收到此错误,因为这不是有效的Oracle SQL语法。无需猜测或编造东西,而应咨询the Oracle documentation,该书是全面,在线且免费的。通过将我们的代码与给定的示例进行比较,我们可以轻松解决大多数编译器错误。

但是一旦您修复了UPDATE语句,您的触发器便会抛出the mutating table error,因为您正试图从TRIP拥有的触发器中从TRIP中进行选择,但这是不允许的。

最简单的方法是:

create or replace trigger UpdateTTM 
  after insert on trip 
  for each row 

begin

  update driver
  set totalTripMade = nvl(totalTripMade,0) + 1
  where driver.Lic# = :new.Lic#;

end UpdateTTM;
/

这假设在创建TRIP记录之前存在DRIVER记录。如果不是这种情况,则应在继续之前解决数据模型中的漏洞。

而且,性能无法扩展,在多用户环境中运行它仍然会遇到问题。但是,这些只是现实世界中的问题,这个问题会给作业分配一些麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.