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

NORTHING...とが表EASTINGの列であると仮定しSPORTS_FACILITIES_STRATEGYます)

ドキュメントのこの例に似ています。

于 2013-10-07T15:36:56.100 に答える
0

Oracle ORA-06512 がスローされました。これは、挿入前に起動する必要のあるトリガーに行を挿入しようとしている可能性があるためです。トリガーが何度も発火し、ループに陥っていました。

于 2013-10-07T15:37:10.947 に答える