curseur dans un déclencheur

J'ai une TABLE existante postn_matrix qui contient une liste des employés et un décompte de leur reee. des postes dans l'organisation.

Chaque fois qu'un poste d'un utilisateur est ajouté ou supprimé, le comte est reflétée dans le tableau thro' ce déclencheur (VIA mise à JOUR)

Maintenant, si il y a un nouvel utilisateur, il ne sera pas avoir une entrée dans postn_matrix, j'ai donc insérer un nouveau record pour lui/elle (VIA un INSERT). Cela doit être introduit à partir de la TABLE de BASE.

La mise à jour semble fonctionner très bien, mais je ne suis pas en mesure de mettre dans un nouvel utilisateur dans la table.

J'ai essayé de traiter ce cas avec un curseur. Mais il n'en a pas été de tout aider encore.
J'espère que certains d'experts pourrait me montrer la lumière.. :). toutes les autres suggestions en plus de l'aide d'un curseur sera très appréciée

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
/
  • Je ne comprends pas. Si il y a un nouvel enregistrement dans BASETABLE et vous savez déjà qu'il n'y a pas d'enregistrement dans POSTN_MATRIX, pourquoi voudriez-vous faire une boucle par un curseur sur POSTN_MATRIX? Il suffit d'insérer un nouvel enregistrement.
  • S'il vous plaît obtenir un livre de base sur SQL et de le lire. Vous avez besoin d'un curseur pour ce faire, et en outre votre SQL ne devrait normalement pas avoir if then déclarations en elle. SQL est un jeu de langage orienté. voir codeproject.com/Articles/10144/SQL-as-a-set-oriented-language
InformationsquelleAutor MayankG | 2012-07-20