begin process at 2008 07 06 07:05:58
1 205 472 membres
51 nouveaux aujourd'hui
14 119 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème Trigger [ Oracle / Functions ] (DrZoune)

Problème Trigger le 23/01/2008 09:33:23

DrZoune
Bonjour a tous,
c'est la première fois que je fais un post sur ce forum donc pardonnez moi si je fais des erreurs dans l'énonciation de mon problème.
Donc j'ai créé un trigger pour faire une mise a jour entre une table principale depuis une table temporaire( les champs des deux tables étant similaires).
     -si un matricule est déja présent dans la table principale alors on fait une mise a jour dans cette table avec les valeurs de la table temporaire.
     -si un matricule n'est pas présent alors on fait une insertion dans la table principale.

[code=oracle8]CREATE OR REPLACE TRIGGER updateTempGest
AFTER INSERT ON TEMP
FOR EACH ROW

DECLARE cpt, cpt1, cpt2, cpt3 int := 1;
        nbreElement int := 'SELECT count(*) FROM GEST';
        ligneGest GESTOR.matr_gest%TYPE;
        ligneTemp TEMP.matr_gest%TYPE;
        TYPE codeGest IS TABLE OF VARCHAR(10) INDEX BY BINARY_INTEGER;
        tabGest codeGest;
        tabTemp codeGest;
        CURSOR lectGest IS SELECT matr_gest FROM GESTOR;
        CURSOR lectTemp IS SELECT matr_gest FROM TEMP;
    
BEGIN
    OPEN lectGest;
    OPEN lectTemp;
    
    FOR cpt 1..nbreElement LOOP
        FETCH lectTemp INTO ligneTemp;
        tabTemp(cpt) := ligneTemp;
    END LOOP;
    
    FOR cpt1 1..nbreElement LOOP
        FETCH lectGest INTO ligneGest;
        tabGest(cpt1) := ligneGest;
    END LOOP;
    
    FOR cpt2 1..nbreElement LOOP
        FOR cpt3 1..nbreElement LOOP
            IF tabTemp(cpt2) = tabGest(cpt3) THEN
            UPDATE GESTOR SET     (GESTOR.nom_gest := TEMP.nom_gest,
                                GESTOR.prenom_gest := TEMP.prenom_gest,
                                GESTOR.secteur_gest := TEMP.secteur_gest,
                                GESTOR.code_gest := TEMP.code_gest,
                                GESTOR.secteur1_gest := TEMP.secteur1_gest,
                                GESTOR.codeSecteur_gest := TEMP.codeSecteur_gest,
                                GESTOR.codeInc_gest := TEMP.codeInc_gest,
                                GESTOR.codeID_gest := TEMP.codeID_gest,
                                GESTOR.codeNom_gest := TEMP.codeNom_gest,
                                GESTOR.dateEmbauche_gest := TEMP.dateEmbauche_gest),
            WHERE tabGest(cpt2) = tabTemp(cpt3);
            ELSE
                INSERT INTO GESTOR VALUES (TEMP.matr_gest,TEMP.nom_gest,TEMP.prenom_gest,TEMP.secteur_gest,TEMP.code_gest,TEMP.groupe_gest,TEMP.secteur1_gest,TEMP.codeSecteur_gest,TEMP.codeInc_gest,TEMP.codeID_gest,TEMP.codeNom_gest,TEMP.dateEmbauche_gest);
            END IF;
            cpt3 := cpt3 + 1;
        END LOOP;
        cpt2 := cpt2 + 1;
    END LOOP;
    
    CLOSE lectGest;
    CLOSE lectTemp;

END;[/code]

L'erreur s'affichant suite à
[code=oracle8]SHOW ERRORS;[/code]
[code=oracle8]1/12     PLS-00103: Symbole "," rencontré à la place d'un des symboles
         suivants :
         constant exception <identificateur>
         <identificateur entre guillemets> table LONG_ double ref char
         time timestamp interval date binary national character nchar

1/35     PLS-00103: Symbole "=" rencontré à la place d'un des symboles
         suivants :
         ) ,[/code]

Je croyais pouvoir faire directement un UPDATE entre les deux tables mais après pas mal de recherches je n'ai rien trouvé, du moins rien qui aille avec mon contexte!

J'aimerais que l'on m'éclaircisse s'il vous plait.

Re : Problème Trigger le 23/01/2008 11:14:07

dominique.stock
bonjour,
je ne suis pas expert en oracle mais une de tes erreurs ne serait pas lié à la virgule en fin de cette ligne :
"  GESTOR.dateEmbauche_gest := TEMP.dateEmbauche_gest), "


Dom

Re : Problème Trigger le 23/01/2008 11:33:46

DrZoune
merci ca devait etre une erreur et en fait j'en ai compris d'autres :
    -dans la déclaration des mes compteurs, a priori je ne peux pas les mettres bout à bout, il fallait les mettres les un en dessous des autres, va savoir pourquoi
    -et dans mes "FOR cpt 1..nbreElement LOOP", il manque un In entre "cpt" et "1"
pioufff ca fait du bien de trouver des réponses quand ca fait déja plusieurs heures que tu planches là dessus!!!!


Classé sous : table, code, temp, gest, gestor

Participer à cet échange

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS