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

AS/400 Discussion :

Fichier avec clé unique n'acceptant pas de doublon


Sujet :

AS/400

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 21
    Points : 5
    Points
    5
    Par défaut Fichier avec clé unique n'acceptant pas de doublon
    Bonjour,

    Je suis débutant dans le monde de l'AS400 et j'ai une question qui va vous paraitre bête
    Voila, j'ai un CL qui copie depuis l'IFS les données d'un fichier texte vers un PF.
    Dans mon fichier texte j'ai des doublons ( N° de matricule)
    Comment puis je faire pour que lors de la copie je ne récupère pas les doublons

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Quand tu récupères ton fichier, au lieu de le mettre dans ta table, tu la mets dans une table équivalente mais décrite cette fois ci sans clé unique.
    Tu peux la créer dans QTEMP par exemple avec l'ordre SQL ci-dessous que tu peux mettre dans un fichier source executable par un RUNSQLSTM :

    Create table qtemp/new as (select * from anc) with no data;

    Puis tu "descends" tes données dans ce fichier qui acceptera les clés en double, puis par une requete SQL tu inseres dans ton nouveau fichier en evitant les clés en double

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci pour ta réponse
    Tu cites dans ton message précédent " puis par une requête SQL tu insères dans ton nouveau fichier en évitant les clés en double "
    Comment via une requête SQL j'insère les données dans mon nouveau fichier en évitant les doublons ?

    Merci pour le coup de main

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Quelle est la description de ta table ?
    --> DSPFFD monfichier (sur une ligne de commande)

    quelles sont les clés ?

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Le fichier recevant les données n'a pas de clé
    En lançant un SQL sur le fichier avec un distinct j'arrive à supprimer le doublon
    Maintenant je souhaites copier le resultat de mon SQl avec le distinct dans un autre fichier et c'est la que ça bloque, car je ne sais pas faire

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    INSERT INTO newtable SELECT .... FROM oldtable

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Dernier renseignement
    Quand je lance mon sql avec le distinct sur la zone en doublon ( Matricule ), il me récupère bien tous les matricules sans doublon
    Mais pourquoi il ne m'affiche que la zone Matricule et pas les autres zones
    Conséquence quand je lance le sql suivant :
    insert into newtable select distinct cmatr from oldtable
    il ne me copie que les données de la zone CMATR ( matricule ), alors que je souhaite avoir les autres zones aussi ( nom, prénom, adresse, etc... )

    Encore merci et désolé

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Car tu demandes les valeurs distinctes que d'une seule colonne.
    Sinon tu peux utiliser UNION pour enlever les doublons :

    INSERT into matable
    Select * from oldtable
    UNION
    select * from oldtable

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Pour faire la requête précédente, il faut que toutes les zones à insérées soient identiques.
    Imagines du as 2 fois le même matricule et avec 2 adresses différentes, la requête donnée avec UNION génèrera aussi des clés en double.
    Maintenant si tu veux insérer le premier enregistrement de chaque matricule, tout en faisant abstraction qu'il soit possible d'avoir des données différentes pour un même employé, tu utiliseras plutôt la requête ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    insert into matable       
    select * from oldtable     
    where (rrn(oldtable)) in   
    (select MIN(rrn(oldtable)) 
    from oldtable              
    group by CMATR)
    MIN pour le premier enregistrement d'un employé
    MAX pour le dernier

  10. #10
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Merci
    Maintenant je vais insérer ce sql dans un programme rpg
    J'espère m'en sortir car c'est la première fois que je vais faire un programme RPG avec des commandes SQL à l'intérieur

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Vu qu'il s'agit d'un INSERT sans paramètres tu peux faire (dans un SQLRPGLE) un ordre SQL statique sans curseur avec directement :

    EXec SQL INSERT into.... ;

  12. #12
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    insert into matable
    select * from oldtable
    where (rrn(oldtable)) in
    (select MIN(rrn(oldtable))
    from oldtable
    group by CMATR)

    Que veux dire RRN dans(RRN(oldtable))
    Donc si j'ajoute la requête ci-dessus dans un SQLRPG je n'aurais plus de doublon

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    RRN = Relative Record Number.

    Imagines un fichier vide.
    Tu ajoutes un enregistrement , il se positonne au premier rang (RRN = 1).
    Le second au RRN = 2 etc...
    Si tu as 10 enregistrements puis tu supprimes le N°3, il y a un trou.
    Si tu ajoutes à nouveau un enregistrement, si ton fichier a été créé avec des DDS, le nouvel enregistrement est placé en N° 11.
    Si ta table a été créée avec SQL (create table...), le nouvel enregistrement est placé en N°3 pour récupérer le gruyère.

  14. #14
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Désolé
    Mais je t'avoue que je n'arrive pas à suivre
    Est ce que via programme il est possible de lire le fichier et de detecter le doublon et de le supprimer
    car la je suis perdu, en faite je recherche une solution simple via programme en automatique pour supprimer les matricules en doublons
    Encore merci

  15. #15
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Oui, cette requête va lire ton fichier qui accepte les doublons et ne prendre qu'un seul enregistrement par matricule (le premier car MIN) et l'insérer dans le nouveau qui lui n'accepte pas les doublons

  16. #16
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    insert into malib/newfile select *from malib/oldfile where
    (rrn(malib/oldfilepf)) in (select min(rrn(malib/oldfilepf))
    from malib/oldfilepf group by cmatr )

    Est ce que quelque chose cloche car il me met des erreurs quand je le teste via STRSQL

    Comment créer un sqlrpg ?

    Merci

  17. #17
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    insert into malib/newfile select *from malib/oldfilepf where
    rrn(oldfilepf) in (select min(rrn(oldfilepf))
    from malib/oldfilepf group by cmatr )

    La requête devrait marcher sans problème, dans le cas contraire quel est le message d'erreur.
    Un SQLRPGLE c'est pareil qu'un RPGLE, c'est le type de source qui change

  18. #18
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Quand je lance la requête j'ai le message suivant :
    Qualificatif de colonne ou table non défini, il parle de la table oldfilePF

  19. #19
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    insert into malib/newfile select * from malib/oldfilepf where
    rrn(oldfilepf) in (select min(rrn(oldfilepf))
    from malib/oldfilepf group by cmatr )

    Ne mets pas le nom de la biblio dans RRN, prends exemple sur la requête ci-dessus

  20. #20
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Voila le message que j'ai en enlevant la bib :

    L'instruction contient un nombre erroné de valeurs

    insert into malib/newfile select *from malib/oldfile where
    rrn(oldfile) in (select min(rrn(oldfile))
    from malib/oldfile group by cmatr )

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Protection d'un unique fichier avec formulaire
    Par tyler94 dans le forum Langage
    Réponses: 5
    Dernier message: 22/07/2009, 18h09
  2. Réponses: 6
    Dernier message: 30/01/2008, 20h46
  3. [Free Pascal] Fichier en écriture ne s'ouvre pas avec ParamCount
    Par JoseF dans le forum Free Pascal
    Réponses: 11
    Dernier message: 09/05/2007, 10h28
  4. Réponses: 2
    Dernier message: 01/05/2007, 18h50
  5. exporter un fichier avec enregistrer uniquement
    Par dietrich dans le forum Framework .NET
    Réponses: 6
    Dernier message: 01/03/2007, 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