cursor in einem trigger

Ich habe eine vorhandene TABELLE postn_matrix enthält eine Liste der Mitarbeiter und eine Zählung Ihrer resp. Positionen in der organisation.

Wenn eine position von einem Benutzer Hinzugefügt oder entfernt wird, wird die entsprechende Anzahl spiegelt sich in der Tabelle thro' diesen Auslöser (VIA UPDATE)

Nun, wenn es ein neuer Benutzer ist, wird er nicht über einen Eintrag in postn_matrix, so habe ich, um einen neuen Datensatz einzufügen, für ihn/Sie (ÜBER EINFÜGEN). Dies muss in Verbindung gebracht werden, aus der Basistabelle.

Das update scheint einwandfrei zu funktionieren, aber ich bin nicht in der Lage zu bringen, in der Sie einen neuen Benutzer in die Tabelle.

Habe ich versucht zu behandeln in diesem Fall mit einem cursor. Aber es nicht helfen, noch.
Ich hoffe, dass einige Experten konnten zeigen, mir das Licht.. :). alle anderen Vorschläge neben der Verwendung der cursor wird sehr geschätzt

CREATE OR REPLACE TRIGGER TRIG1
BEFORE INSERT OR DELETE ON (BASETABLE)
FOR EACH ROW
DECLARE
  cursor c1 is
  select person_id 
  from postn_matrix;

  v_temp varchar2(15);
BEGIN
  IF INSERTING THEN
    open c1;    
    LOOP
      fetch c1 into v_temp;

      if v_temp!=:new.person_id THEN
        insert into POSTN_MATRIX (PERSON_ID)
        VALUES (:new.PERSON_ID);
      else
        UPDATE POSTN_MATRIX
        //this is working fine ;

      END IF;
    end loop;
    close c1;

END
/
  • Ich verstehe es nicht. Wenn es ein neuer Datensatz ist in der BASETABLE und Sie wissen bereits, dass es keine Aufzeichnungen in POSTN_MATRIX, warum würden Sie wollen, um eine Schleife durch einen cursor auf POSTN_MATRIX? Legen Sie einfach einen neuen Datensatz.
  • Bitte Holen Sie sich ein grundlegendes Buch über SQL und Lesen Sie es. Sie brauchen einen cursor, um dies zu tun, und darüber hinaus Ihre SQL sollte in der Regel nicht haben if then Aussagen in ihm. SQL ist eine Reihe orientierte Sprache. siehe codeproject.com/Articles/10144/SQL-as-a-set-oriented-language
InformationsquelleAutor MayankG | 2012-07-20
Schreibe einen Kommentar