一个触发器,它将实现更新级联到PK

时间:2014-09-14 08:05:04

标签: sql oracle oracle-sqldeveloper

我需要编写一个触发器,它将为SummerGames的(gameno)代码实现更新级联,但我一直遇到`错误(11,1):PLS-00103:遇到符号" CREATE

我正在使用Oracle SQL Developer。

我目前的代码:

create or replace TRIGGER SG_GAMENO_UPDATE 
BEFORE UPDATE OF SG_GAMENO ON SUMMERGAMES 
FOR EACH ROW 
BEGIN
  UPDATE SUMMERGAMES
  SET SG_GAMENO = :new.SG_GAMENO
  WHERE SG_GAMENO = :old.SG_GAMENO;
END;

2 个答案:

答案 0 :(得分:1)

您需要结束触发器语句,该语句部分为PL / SQL,并且在一行上有一个/。这将结束声明并使其运行。

create or replace TRIGGER SG_GAMENO_UPDATE 
BEFORE UPDATE OF SG_GAMENO ON SUMMERGAMES 
FOR EACH ROW 
BEGIN
  UPDATE SUMMERGAMES
  SET SG_GAMENO = :new.SG_GAMENO
  WHERE SG_GAMENO = :old.SG_GAMENO;
END;
/

目前,您的脚本中的任何内容 - 似乎是另一个create语句 - 被视为同一触发器创建的一部分,并且该关键字在块内无效。

您的触发器似乎没有任何意义,当您尝试更新(将被检测并杀死)时,最多会导致无限递归,但这是一个单独的问题。也许您打算更新子表,而不是触发器所针对的同一个表。但你根本不应该更新PK;这就是synthetic keys are generally preferred over natural ones的原因。 gameno听起来很合成。

答案 1 :(得分:0)

它会解决您的代码分离问题,我的意思是当您执行上面的代码片段时,您在其他代码中标记了某些部分,这就是您遇到语法错误的原因。尝试只执行上面的代码,从sql编辑器中删除任何其他代码