0

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

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 行

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

4

2 回答 2

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;
/

...假设NORTHINGEASTING是表中的SPORTS_FACILITIES_STRATEGY列)

这类似于文档中的这个示例

于 2013-10-07T15:36:56.100 回答
0

Oracle ORA-06512 被抛出,因为您可能试图在触发器中插入一行,该触发器必须在插入之前触发。触发器导致自己一遍又一遍地触发并陷入循环。

于 2013-10-07T15:37:10.947 回答