我有一个触发器,我想在更新或创建新记录后填充几何列。我构建的触发器如下:
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行
我知道它在更新期间挣扎但是我被卡住了!任何帮助/建议都非常感谢。
答案 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;
/
...假设NORTHING
和EASTING
是SPORTS_FACILITIES_STRATEGY
表中的列
答案 1 :(得分:0)
引发了Oracle ORA-06512,因为你可能试图在触发器中插入一行,在插入之前必须触发该行。触发器导致自己反复点火并陷入循环。