7

削除トリガーを作成しようとしています。Nemanet_Navigationと呼ばれるこのナビゲーションテーブルがあります。テーブルにはそれ自体への外部キーがありますが、INSERTおよびUPDATE仕様で選択したテーブルの関係を選択する場合-ルールNOアクションを削除します。したがって、カスケードは選択しません。次に、このトリガーがあります。

CREATE TRIGGER Del_Nemanet_Navigation ON Nemanet_Navigation 
  INSTEAD OF DELETE
AS  

CREATE TABLE #Table(
    Nav_ID uniqueidentifier
    )
    INSERT INTO #Table (Nav_ID)
    SELECT Nav_ID
    FROM deleted

    DECLARE @C uniqueidentifier
    SET @c = 0

    WHILE @C <> (SELECT COUNT(Nav_ID) FROM #Table) BEGIN
        SELECT @c = COUNT(Nav_ID) FROM #Table

        INSERT INTO #Table (Nav_ID)
        SELECT Nemanet_Navigation.Nav_ID
        From Nemanet_Navigation
        LEFT OUTER JOIN #Table ON Nemanet_Navigation.Nav_ID = #Table.Nav_ID
        WHERE   Nemanet_Navigation.Nav_pID IN (SELECT Nav_ID FROM #Table)
        AND     #Table.Nav_ID IS NULL
    END

    DELETE  Nemanet_Navigation
    FROM    Nemanet_Navigation
    INNER JOIN #Table ON Nemanet_Navigation.Nav_ID = #Table.Nav_ID

しかし、次のエラーが発生します。

'Nemanet_Navigatin'にINSTEADOFDELETEトリガー'Del_Nemanet_Navigation'を作成できません。

これは、テーブルにDELETEがカスケードされた外部キーがあるためです。しかし、私のNemante_Navigationテーブルには削除ルールがあります-アクションはありません(しかし、私にはわからない何らかの理由で灰色でマークされています-そしてそれを変更することはできません)。トリガーは、Nemanet_Navigationテーブルの下のTriggersというフォルダーにあります。誰か助けてもらえますか?

4

1 に答える 1

1

INSTEAD OFトリガーは、使用できないビューを変更するためのものですDMLBEFOREまたはAFTERトリガーで試してください。

Oracle RDBMS

于 2011-07-19T15:35:05.303 に答える