ORA 04088触发问题

时间:2013-10-07 15:30:05

标签: sql oracle

我有一个触发器,我想在更新或创建新记录后填充几何列。我构建的触发器如下:

CREATE OR REPLACE TRIGGER SFS_TRIGGER 
AFTER INSERT OR UPDATE ON SPORTS_FACILITIES_STRATEGY 
BEGIN
  UPDATE sports_facilities_strategy
     SET GEOMETRY = MDSYS.SDO_GEOMETRY(2001,81989, MDSYS.SDO_POINT_TYPE(EASTING,
                                                                        NORTHING,
                                                                        NULL),
                                       NULL,NULL);

END;

但是我不断收到以下错误消息:

  

ORA-04088:执行触发'GIS_ADMIN.SFS_TRIGGER'时出错   ORA-06512:在“GIS_ADMIN.SFS_TRIGGER”,第2行

我知道它在更新期间挣扎但是我被卡住了!任何帮助/建议都非常感谢。

2 个答案:

答案 0 :(得分:3)

触发器中的更新将重新触发相同的触发器,因此它将永远循环 - 错误是Oracle终止循环。

要仅在导致触发器触发的行上设置geometry字段,您不会发出更新,而是使用:new语法设置值。我想你想要一个before触发器......

CREATE OR REPLACE TRIGGER SFS_TRIGGER 
BEFORE INSERT OR UPDATE ON SPORTS_FACILITIES_STRATEGY 
FOR EACH ROW
BEGIN
  :NEW.GEOMETRY := MDSYS.SDO_GEOMETRY(2001,81989,
    MDSYS.SDO_POINT_TYPE(:NEW.EASTING, :NEW.NORTHING, NULL), NULL,NULL);
END;
/

...假设NORTHINGEASTINGSPORTS_FACILITIES_STRATEGY表中的列

this example in the documentation类似。

答案 1 :(得分:0)

引发了Oracle ORA-06512,因为你可能试图在触发器中插入一行,在插入之前必须触发该行。触发器导致自己反复点火并陷入循环。