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

Langage SQL Discussion :

MAJ d'une table sous SQL Server par insertion


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [Résolu] MAJ d'une table sous SQL Server par insertion
    Bonjour,

    Je dois mettre à jour ma table de référence CLIENT(deux colonnes: code, client) en fonction des nouveaux clients que je trouve dans une autre
    table INFRA :

    - si le nom_client de la table INFRA n'existe pas dans la
    table CLIENT, je l'insère dans la table CLIENT en lui mettant un code incrémenté de 1 (max(code)+1)

    - par exemple si le nom_client 'alt' de INFRA n'existe pas dans CLIENT, je dois après insertion avoir dans CLIENT(qui a déjà 2 clients avec les codes respectifs 1 et 2) le nouveau client 'alti' avec comme code=3.

    Je pense que je dois créer un curseur qui parcours la table INFRA pour récupérer les nom_client qui ne sont pas dans CLIENT, mais pour le reste je ne sais pas coder.

    Comment dois-je écrire le script? Je vous remercie d'avance.

    Cordialement

    Problème résolu.

  2. #2
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Oui pour le curseur tu récupère tous les clients que tu dois insérer.

    Ensuite c tout bete, tu initialises une var à la valeur max

    select max(code) INTO mavar FROM CLIENT;

    A chaque tour dnas le curseur tu incréméntes ta variable de 1 ...
    mavar:=mavar+1;
    INSERT INTO CLIENT ( mavar, lenomduclient);

    Enfin dans le concept c ça ... Ensuite reste à respecter la syntaxe PL/SQL (c'est plutot sur ça que tu demandes conseil ?)

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par in2111
    Oui pour le curseur tu récupère tous les clients que tu dois insérer.

    Ensuite c tout bete, tu initialises une var à la valeur max

    select max(code) INTO mavar FROM CLIENT;

    A chaque tour dnas le curseur tu incréméntes ta variable de 1 ...
    mavar:=mavar+1;
    INSERT INTO CLIENT ( mavar, lenomduclient);

    Enfin dans le concept c ça ... Ensuite reste à respecter la syntaxe PL/SQL (c'est plutot sur ça que tu demandes conseil ?)
    Bonjour in2111,

    Merci pour tes précisions. En fait j'avais compris le principe mais je ne sais pas vraiment l'écrire en PL/SQL car je suis novice dans ce langage. Voici ce que j'ai écris mais qui ne marche pas:

    declare

    cursor c1 is select distinct(nom_client) from INFRA where nom_client NOT IN (select client from CLIENT);//je récupère tous les clients de INFRA qui ne sont pas dans CLIENT
    enreg INFRA.nom_client%type;//est-ce nécessaire?
    mavar varchar2(10);
    begin
    open c1;
    loop
    fetch c1 into enreg; //je mets tous les enreg récupérés dans enreg, est-ce nécessaire?
    select max(code) into mavar from CLIENT;
    mavar:=mavar+1;
    insert into CLIENT values (mavar, enreg);
    commit;
    end loop;
    close c1;
    end;
    /

    A l'exécution, mon SQLPLUS plante, donc il y a une grosse erreur qque part mais où?
    Merci infiniment de me renseigner.

    Cordialement.

  4. #4
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Bon attends

    déjà :

    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
    CREATE PROCEDURE superProcedure
    IS
    //d'abord tes var
    enreg INFRA.nom_client%type;
    mavar varchar2(10);
     
    //ensuite le curseur
    CURSOR c1
    Is
    select distinct(nom_client) from INFRA where nom_client NOT IN (select client from CLIENT);
     
    //c parti
    BEGIN
    select max(code) into mavar from CLIENT;
     
    OPEN c1;
     
    LOOP
    	FETCH c1 INTO enreg;
    EXIT WHEN c1%NOTFOUND;
     
    mavar:=mavar+1;
    INSERT INTO CLIENT values (mavar, enreg); 
     
    END LOOP;
     
    CLOSE c1;
     
    COMMIT;
     
    END;
    /
    SHOW ERROR      /*tu vas voir c pratique ça */


    Si je me suis pas gouré ...

  5. #5
    Candidat au Club
    Inscrit en
    Juin 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Hello in2111,

    J'ai testé et ça marche. Je te remercie infiniment

    Bon aprèm.

  6. #6
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    de rien ...

    Edite ton premier message et mets [resolu] devant le sujet, c une bonne habitude à prendre ...

    Bonne aprèm à toi aussi

  7. #7
    Membre actif
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Points : 252
    Points
    252
    Par défaut
    En supposant que tu ais une séquence pr te générer tes IDs, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO CLIENT(CODE, CLIENT) (SELECT SEQ_CODE.NEXTVAL, INFRA.CLIENT FROM INFRA WHERE INFRA.CLIENT NOT IN (SELECT C.CLIENT FROM CLIENT C))
    /
    PS : Attention à select max(code) into mavar from CLIENT; il vaut mieux préférer une séquence ou table de clé pour générer des IDs.
    Allez faire un tour sur le site de SQLPro pour en savoir plus sur les problèmes d'unicité de clé.

    McFoggy

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

Discussions similaires

  1. Copie d'une table sous SQL-Server 2005
    Par silkflo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/12/2011, 17h32
  2. Vider une table sous SQL Server
    Par phenomeno dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/04/2011, 12h48
  3. Impossible de creer une table sous sql server 2005
    Par Hicham1982 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/04/2010, 16h59
  4. Réponses: 4
    Dernier message: 16/09/2009, 15h21
  5. tableau dynamique via une table sous sql server
    Par bibi2607 dans le forum ASP
    Réponses: 5
    Dernier message: 21/02/2005, 15h45

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