IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

TRIGGER BEFORE INSERT


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 80
    Par défaut TRIGGER BEFORE INSERT
    Bonjour,

    je dois créer un trigger qui me permet de renseigner un champ supplémentaire dans la ligne que je dois inserer.

    Pb : il ne connaît pas la variable new.

    Une idée. Voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    CREATE or REPLACE TRIGGER SET_SRV_LVL_ON_INC
    BEFORE INSERT
        ON INCIDENT
    DECLARE
       srv_level QTABLE.QT_DES%TYPE;
    BEGIN
        IF new.ASSET_EQUIPEMENT IS NOT NULL THEN
    		SELECT QT_DES INTO srv_level
    	 	FROM
    	    		POSTE_DE_TRAVAIL T1, QTABLE T2
    	 	WHERE 
    			LTRIM(RTRIM(T1.CHPAR11))=LTRIM(RTRIM(T2.QT_CODE(+))) AND
    			T1.CODE_W = new.ASSET_EQUIPEMENT;
    	    IF srv_level IS NOT NULL THEN
    		   new.COMP_FIELD65 := srv_level;
    	    END IF;
        END IF;
    END;
    Merci.

  2. #2
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Bonjour,
    La bonne syntaxe n'est pas new.ASSET_EQUIPEMENT (par ex.), mais :new.ASSET_EQUIPEMENT.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 80
    Par défaut
    J'ai testé et voilà les erreurs que j'obtiens

    A partir de SQL+
    ERREUR à la ligne 1 :
    ORA-04082: références NEW ou OLD interdites dans déclencheurs niveau table

    ou lorsque je passe par OEM
    Paramètre IN ou OUT absent dans l'index ::1

    Merci

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    La recherche est ton amie.


    Le problème est tout autre : vous avez fait un statement trigger et non un row trigger !
    il faut rajouter "FOR EACH ROW" pour que les variables :NEW et :OLD aient un sens !

    Si on fait un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE inscription SET ..  WHERE ...
    Et que l'ordre ci-dessus impacte 5000 lignes, un trigger "FOR EACH ROW" sera appellé 5000 fois, tandis qu'un statement trigger ne sera appellé qu'une seule fois car il n'y a eu qu'une seule instruction.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 80
    Par défaut
    Ce que je souhaites faire c'est seulement controler la ligne que je veux insérer.
    Comment accéder aux données dans ce cas alors?

    Merci

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Je viens de vous donner la réponse, un trigger "FOR EACH ROW".

Discussions similaires

  1. [10g] Trigger before insert
    Par Lung dans le forum Oracle
    Réponses: 6
    Dernier message: 21/12/2007, 16h22
  2. Trigger Before Insert et Before Update
    Par NicoNours dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 14/08/2007, 10h20
  3. Trigger : Before insert
    Par guitou0 dans le forum Développement
    Réponses: 6
    Dernier message: 29/06/2007, 11h39
  4. Trigger Before Insert
    Par Fred_ET dans le forum Administration
    Réponses: 7
    Dernier message: 22/11/2006, 00h29
  5. Créer un trigger "before insert" avec SQL Server
    Par bubi dans le forum Développement
    Réponses: 2
    Dernier message: 14/11/2005, 10h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo