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

SQL Oracle Discussion :

probleme de mise a jour bd distante


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 328
    Par défaut probleme de mise a jour bd distante
    Bonsoir,
    lorsque j'essaie de modifier un champ pr la premiere fois , le trigger marche a merveille, mais dés que j'essaie de modifier le meme champ pour la 2eme fois , cette erreur surgit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ORA-00001: violation de contrainte unique (UNI.SYS_C0010539)
    ORA-02063: prÚcÚdant line de EXPORTSYNCHRONE
    ORA-06512: Ó "UNI.TRIGGER_CHAMPS", ligne 11
    ORA-04088: erreur lors d'exÚcution du dÚclencheur
    'UNICAMPUS.TRIGGER_CHAMPS'
    et voila le trigger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    create or replace TRIGGER trigger_champs BEFORE UPDATE OR INSERT ON PERSONNES FOR EACH ROW
    DECLARE
    compt INTEGER;
    valeur VARCHAR(10);
    BEGIN
     if (:new.diffphoto = '1') then valeur:='O' ;
     else valeur:='N';
     end if;
    compt:= SQLROWCOUNT(:new.id_personne) ;
    update asynchrone@exportSynchrone set diffphoto = valeur  ,date_maj= NVL( :new.date_maj, NVL( :new.dat_creation, '01/01/1999')) where id_personne= substr( :new.id_personne ,1,(length( :new.id_personne )-12)) ; if  compt = 0 then 
    insert into asynchrone@exportSynchrone (diffphoto ,date_maj,id_personne)   Values (valeur  ,NVL(:new.date_maj, NVL(:new.dat_creation, '01/01/1999')) ,substr(:new.id_personne,1,(length(:new.id_personne)-12)) ) ;   
    end if ; 
    END ;

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Tu essayes d'insérer 2 fois le même enregistrement.

    Pour débugguer faut faire des dbms_output pour savoir où tu passes et vérifier pourquoi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    compt:= SQLROWCOUNT(:new.id_personne) ;
    >A quoi ça sert ?
     
    UPDATE asynchrone@exportSynchrone SET diffphoto = valeur  ,date_maj= NVL( :new.date_maj, NVL( :new.dat_creation, '01/01/1999')) WHERE id_personne= substr( :new.id_personne ,1,(length( :new.id_personne )-12)) ; 
     
    IF  compt = 0 then 
    > Non, c'est le SQL%rowcount de l'UPDATE qui te dira si tu as mis à jour une ligne ou pas.
     
    INSERT INTO asynchrone@exportSynchrone (diffphoto ,date_maj,id_personne)   VALUES (valeur  ,NVL(:new.date_maj, NVL(:new.dat_creation, '01/01/1999')) ,substr(:new.id_personne,1,(length(:new.id_personne)-12)) ) ;

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 328
    Par défaut
    oui j'ai fait un dbms , meme si j'insere , le sql%rowcount me renvoi 0 , meme si l'enregistrement existe bel et bien dans la table
    le sqlrowcount , c'est une fonction que j'ai defini , ca ressemble un peu a sql%rowcount , parce que au debut j'ai cru que c'est sql%rowcount qui fonctionne pas.. on dirait que j'ai besoin d'un commit

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    je vais tester par dblink.

    Sinon utilises MERGE si tu es en 9i et +, ça regroupe UPDATE/INSERT

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Ca marche très bien par dblink :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    BEGIN
    	UPDATE MATABLE@DBLINK1
        SET dept = '01'
        WHERE dept = '01'
        AND ROWNUM < 3;
        DBMS_OUTPUT.PUT_LINE('Nb update : '|| SQL%rowcount);
    END;
     
    Nb update : 2

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    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
    CREATE OR REPLACE TRIGGER trigger_champs 
    BEFORE UPDATE OR INSERT ON PERSONNES 
    FOR EACH ROW
    DECLARE
    BEGIN
     
        UPDATE asynchrone@exportSynchrone 
        SET diffphoto = DECODE(:NEW.diffphoto,'1', 'O', 'N'), 
        	date_maj= NVL(:NEW.date_maj, NVL(:NEW.dat_creation, '01/01/1999')) 
        WHERE id_personne= SUBSTR(:NEW.id_personne ,1,(LENGTH(:NEW.id_personne )-12));
     
        IF SQL%ROWCOUNT = 0 
        THEN 
    	INSERT INTO asynchrone@exportSynchrone (diffphoto ,date_maj,id_personne)   
            VALUES (DECODE(:NEW.diffphoto,'1', 'O', 'N'), 
            	NVL(:NEW.date_maj, NVL(:NEW.dat_creation, '01/01/1999')),
                    SUBSTR(:NEW.id_personne,1,(LENGTH(:NEW.id_personne)-12)) );   
        END IF; 
    END;

  7. #7
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 328
    Par défaut
    je sais , toute a l'heure lorsque j'ai fait le database link vers ma base de données locale ( j'ai consideré que ma bd localeest la bd distante ) tout marche a merveille , mais une fois j'ai voulu le tester sur une vraie bd distante , on dirait qu'il ne prend pas en considerations les insert faites auparavant
    c'est due a quoi ? mon trigger est correct ,enfin je pense ..
    est ce qu'il ya une "refresh" en oracle ?comme ca le sql%rowcount maffichera le bon resultat et non pas 0 , meme s'il existe bien des elements ajoutés dans la table distante

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SGBD] [MySQL] Problème de mise à jour d'une table
    Par philippef dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 13/01/2006, 15h42
  2. probleme de mise a jour automatique de windowd XP
    Par blandinais dans le forum Windows XP
    Réponses: 4
    Dernier message: 25/12/2005, 23h39
  3. probleme de mise a jour de la BD depuis un formulaire
    Par sebduduf dans le forum Requêtes
    Réponses: 1
    Dernier message: 01/11/2005, 18h07
  4. [Refresh] Probleme de mise a jour graphique
    Par Clorish dans le forum Composants VCL
    Réponses: 4
    Dernier message: 25/07/2005, 18h44
  5. [] [Install] Problème de mise à jour des dll
    Par pepper dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 23/01/2003, 22h34

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