trigger - insert verhindern

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • trigger - insert verhindern

    hallo!

    will (bzw. muss) mit einem trigger verhindern, dass ein insert erfolgt, wenn ein bestimmtes kriterium erfüllt ist. (hier: kein insert bei kunde mit bon = C.) hab schon gegoogelt und bin mittlerweile bei folgendem code.

    Code:
    CREATE OR REPLACE TRIGGER kunde_c
    BEFORE INSERT ON rechnung
    FOR EACH ROW
    
    DECLARE
    bon char(1);
    bonitaet_c EXCEPTION;
    
    BEGIN
      
      SELECT k.bonitaet INTO bon
      FROM kunde k
      WHERE k.nr = :new.knr;
      
      IF bon = 'C' THEN
        RAISE bonitaet_c;
      END IF;
      
    EXCEPTION
      WHEN bonitaet_c THEN
        NULL;
    
    END;
    das problem ist nur, dass er das insert trotzdem macht. gibts den befehl "null;" überhaupt? wie kann man es sonst anstellen, dass das insert nicht durchgeführt wird?

    lg und danke schon mal.

  • #2
    Wenn ich mich recht erinnere, tust du dich deutlich leichter, den Datensatz mit einem AFTER INSERT wieder zu löschen
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      ja, das is schon mal eine gaanz gute idee! danke! nur scheiterts bei mir schon wieder an der ausführung. ich ruf den trigger ja durch die tabelle "rechnung" auf, aber nun will ich ja einen datensatz aus eben dieser tabelle wieder löschen. (den, der nicht eingefügt hätte werden dürfen.) und das geht ja nicht, darf ja nicht auf die mutierende tabelle zugreifen. wie stell ich das mit dem löschen dann an??

      Code:
      CREATE OR REPLACE TRIGGER kunde_c
      AFTER INSERT ON rechnung
      FOR EACH ROW
      
      DECLARE
      bon char(1);
      
      BEGIN
        
        SELECT k.bonitaet INTO bon
        FROM kunde k
        WHERE k.nr = :new.knr;
        
        IF bon = 'C' THEN
          DELETE FROM rechnung WHERE nr = :new.nr; -- FALSCH! :)
        END IF;
        
      END;

      Kommentar


      • #4
        http://asktom.oracle.com/tkyte/Mutate/index.html sollte helfen

        AFTER INSERT TRIGGER auf Zeilenbasis = mutating table error
        AFTER INSERT TRIGGER auf Statementbasis = kein mutating table error

        =>
        - ROWID der neuen Einträge merken (AFTER INSERT FOR EACH ROW)
        - Überflüssige Einträge löschen (AFTER INSERT)

        Wenn das nicht geht, weiß ich auch nicht weiter, es sei denn, du prüfst anwenudngsseitig vor dem Insert
        Zuletzt geändert von mrhappiness; 12.04.2007, 17:25.
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Schon mal ein RETURN FALSE probiert ... soll in MySQL gehen ...
          carpe noctem

          [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
          [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

          Kommentar


          • #6
            das mit "return false" hat leider nicht funktioniert. aber vielen, vielen dank für den link, mrhappiness!!! auf das wär ich selber sicher nicht gekommen... *g* aber jetzt funkts endlich!!! danke nochmals! lg

            Kommentar

            Lädt...
            X