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 :

Curseur et trigger complexe (du moins pour moi)


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 10
    Points : 13
    Points
    13
    Par défaut Curseur et trigger complexe (du moins pour moi)
    Bonjour

    j'ai passé toute la soirée sur ce trigger
    C'est mon premier trigger avec curseur et de loin le plus compliqué que j'ai pu construire soyez indulgent.
    NB: Je suis sur oracle 10g.
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    create or replace trigger TRG_trigger1
    AFTER INSERT ON PRODUIT
    FOR EACH ROW
    DECLARE 
    /* Le but recherché est de sélectionner les produits ( s'il en existe ) dont le NUM 
    est supérieur à l'insertion et dont la catégorie num est identique à celle de l'insertion. 
    J'espère ne pas mettre trompé sur la syntaxe */
    	CURSOR cur_produit IS 
    		SELECT produitNUM 
    		FROM CONSTITUER 
    		WHERE produitNUM > :new.produitNUM 
    		AND categNUM = 
    			( 
    			SELECT categNUM 
    			FROM CONSTITUER
    			WHERE :new.produitNUM = produitNUM
    			); 
    	V_produit CONSTITUER.produitNUM%TYPE;
    BEGIN
    	OPEN cur_produit;
    	LOOP
    		FETCH cur_produit INTO V_produit;
    		IF (cur_produit%FOUND) THEN
    /* Si un produit dont l'ID est supérieur et de même catégorie que le produit insérer, alors  instruction 1 : */
    		INSERT INTO OCCURENCE_produit@LIEN_DW
    		VALUES (:new.OCCVNUM, :new.OOCVDATE, :new.OCCVETAT, :new.produitNUM, 0, 0);
    		ELSE
    /* Sinon aucun produit dont l'ID est supérieur et de même catégorie, alors instruction 2 : */
    			INSERT INTO OCCURENCE_produit@LIEN_DW
    			VALUES (:new.OCCVNUM, :new.OOCVDATE, :new.OCCVETAT, :new.produitNUM, 0, 0);
    			INSERT INTO OCCURENCE_categ@LIEN_DW
    			VALUES ('', sysdate,0 ,0 ,0);
    			EXIT;
    		END IF;
    	END LOOP;
    	CLOSE cur_produit;
    END;
    Alors chose incroyable, à peine sortie de l'éditeur de code , j’exécute le trigger :aucune erreur !! une première pour moi :p. Mais malheureusement, il ne fait absolument pas ce que je souhaitais
    Serriez vous pourquoi ??

    Un immense merci par avance.

    Nb: je précise que malheureusement le but de l'exercice (scolaire) et de faire un gros curseur, sur lequel on applique %FOUND.

    EDIT: Je crois comprendre que c'est la définition du curseur qui cloche . L'utilisation de :new n'est ( à priori) pas possible dans la déclaration du curseur, mais je ne vois pas par qu'elle procédé utilisé les substituer??

  2. #2
    Membre du Club
    Homme Profil pro
    ingénieur d'étude PL/SQL
    Inscrit en
    Octobre 2002
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur d'étude PL/SQL

    Informations forums :
    Inscription : Octobre 2002
    Messages : 53
    Points : 69
    Points
    69
    Par défaut
    tu veux que :new.produitNUM (nouveau produit dont id est superieur à ceux existant) soit inseré ?

    je pence que c'est ton curseur qui n'est pas correct

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CURSOR cur_produit IS 
            SELECT produitNUM 
            FROM CONSTITUER 
            WHERE produitNUM < :new.produitNUM 
            AND categNUM = 
                ( 
                SELECT categNUM 
                FROM CONSTITUER
                WHERE :new.produitNUM = produitNUM
                );

Discussions similaires

  1. une requete complexe.. enfin trop pour moi
    Par sp2308 dans le forum SQLite
    Réponses: 3
    Dernier message: 23/08/2010, 20h47
  2. [MySQL] une requete complexe, enfin trop pour moi
    Par sp2308 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/06/2009, 23h06
  3. [VBA]Copies complexes (pour moi) en cascade
    Par poivre dans le forum VBA Access
    Réponses: 1
    Dernier message: 06/09/2007, 23h20
  4. SELECT complexe (pour moi)
    Par Zorglu dans le forum Requêtes
    Réponses: 6
    Dernier message: 11/01/2007, 19h11
  5. Gérer un Formulaire un peu complexe pour moi
    Par budylove dans le forum Langage
    Réponses: 3
    Dernier message: 17/05/2006, 11h01

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