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 :

eviter les doublons


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 205
    Points : 78
    Points
    78
    Par défaut eviter les doublons
    slt a vous
    j'ai créé ma base de donnée avec oracle 9i et l'un de mes formulaires sur oracle_form 6i. Mon formulaire "ville" contient deux champs et par lequel j'arrive a faire mes enrégistrements parfaitement.
    Il s'agit des champs "cod_ville" et "designation".
    le cod_ville s'incremente automatiquement et je ne renseigne que le champ designation.
    Je veu permetre à mon application d'eviter les doublons; à savoir saisir deux fois la meme ville.
    sur le pre_insert de mon bouton "valider", je fais un test avec la syntaxe suivante:

    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
    declare
    cursor cur_rech is 
    select designation from ville;
    n number;
    vil varchar2(50);
     begin
    		cursor cur in cur_rech 
    		loop
    		fetch cur_rech into vil;
    		if :ville.designation=vil then
    		n:=show_alert('alert_vil');
    	             else
    	             exit;
    	            end if;
    	            end loop;
    end;
    Je constacte que ma syntaxe ne marche ne resoud pas mon problème.

    Je viens donc à vous pour demander de l'aide.
    merci d'avance et que Dieu vous benisse!!!

  2. #2
    Invité
    Invité(e)
    Par défaut
    et pour trouver les doublons, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select designation , count(*) from ville group by designation having count(*) >1 ;
    Pour les éviter, tu peux mettre une contrainte d'unicité sur designation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter table ville add  CONSTRAINT ville_designation_UK UNIQUE (DESIGNATION);

  3. #3
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Pourquoi ton script ne marche pas :

    Tu fais un curseur sur toute ta table (!? pourquoi toute la table)
    Tu boucles
    1er enregistrement, si c'est égal tu fais un show_alert
    Sinon, tu sors de la boucle !

    Donc pour corriger ce serait comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DECLARE
       n NUMBER;
    BEGIN
    	SELECT 1
        INTO n
        FROM VILLE
        WHERE designation = :ville.designation
        AND ROWNUM = 1;
        n:=show_alert('alert_vil');
    EXCEPTION
    WHEN NO_DATA_FOUND THEN NULL;
    END;
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 205
    Points : 78
    Points
    78
    Par défaut surpris
    j'avoue que ta syntaxe marche mais à vrai dire je ne comprend pas la syntaxe.
    Tu peux me l'expliquer un peu afin que je puisse la refaire au cas où il y aurait de petites modiffications dans mes futures applications, merci

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

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Je regarde si 1 donnée identique existe dans la table VILLE
    S'il n'y en a pas, ca sort en NO_DATA_FOUND
    S'il y en a le traitement continue (show_alert).

    Mais tout ça c'est du sql standard.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  6. #6
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Solution de Jérôme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter table ville add  CONSTRAINT ville_designation_UK UNIQUE (DESIGNATION);
    Pourquoi faire le travail d'oracle, une contrainte unique suffira, et après on catch le message d'erreur dans le on_erreur
    Trigger on_erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    declare 
    n number ;
    begin 
    if ERROR_CODE ='.....' then 
    n:=show_alert('alert_vil');
    end if;
    end ;

  7. #7
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 205
    Points : 78
    Points
    78
    Par défaut encore merci
    merci de votre aide, j'avoue que la dernière solution n'est pas mal non plus, bonne soiree a vous!!!

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

Discussions similaires

  1. Après importation, eviter les doublons
    Par uloaccess dans le forum Access
    Réponses: 6
    Dernier message: 16/11/2005, 16h36
  2. [Débutant][XSLT]Eviter les doublons
    Par leminipouce dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 21/10/2005, 11h34
  3. hash et Tie , eviter les doublons
    Par bluecurve dans le forum Langage
    Réponses: 5
    Dernier message: 12/10/2005, 16h39
  4. Eviter les doublons
    Par cyrill.gremaud dans le forum ASP
    Réponses: 5
    Dernier message: 14/09/2005, 12h37
  5. [langage] 2 fichier dans 1 en evitant les doublons
    Par remixxl dans le forum Langage
    Réponses: 6
    Dernier message: 26/07/2004, 17h05

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