MAJ d'une table sous SQL Server par insertion
igo
-
batmat Messages postés 1871 Date d'inscription Statut Membre Dernière intervention -
batmat Messages postés 1871 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- MAJ d'une table sous SQL Server par insertion
- Table ascii - Guide
- Insertion table des matières word - Guide
- È maj - Guide
- Maj chrome - Accueil - Applications & Logiciels
- Cybera server - Télécharger - Divers Réseau & Wi-Fi
3 réponses
C koi comme langage de script ??? pasque en SQL pur, c pas possible... En PHP, en PL/SQL ça l'est mais après ya ptete d'autre solution
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
AAAAh ben alors t'es bien tombé, pasque le PL/SQL c mon dada :) Non sérieusement, j'en bouffe depuis un mois, alors ya pas de pb ;-p
Là chui au boulot, donc chpeux pas trop passer du temps à ton algo, déblaie donc au moins l'algo, répond moi avec le pseudo-code auquel tu penses, donne des précisions si tu le juges utile et je te dis comment coder ce soir (vers 19h00, désolé, chpeux pas avant, j'espère que c pas aujourd'hui)
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
Là chui au boulot, donc chpeux pas trop passer du temps à ton algo, déblaie donc au moins l'algo, répond moi avec le pseudo-code auquel tu penses, donne des précisions si tu le juges utile et je te dis comment coder ce soir (vers 19h00, désolé, chpeux pas avant, j'espère que c pas aujourd'hui)
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
Hello Batman,
Je te remercie pour ta disponibilité. J'ai trouvé et testé avec succès le code PL/SQL. Mais, je travaille sous SQL Server et il y a des nuances. Donc je suis en train de transcrire le code ci-dessus en SQL de SQL Server, ce qui n'est pas simple car je suis novice dans le PL/SQL, mais bon je commence à voir le bout du tunnel. Si j'y arrive, je te fais signe.
CREATE OR REPLACE PROCEDURE superProcedure
IS
enreg INFRA.nom_client%type;
mavar varchar2(10);
CURSOR c1
Is
select distinct(nom_client) from INFRA where nom_client NOT IN (select client from CLIENT);
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;
EXECUTE superProcedure ;
Je te remercie pour ta disponibilité. J'ai trouvé et testé avec succès le code PL/SQL. Mais, je travaille sous SQL Server et il y a des nuances. Donc je suis en train de transcrire le code ci-dessus en SQL de SQL Server, ce qui n'est pas simple car je suis novice dans le PL/SQL, mais bon je commence à voir le bout du tunnel. Si j'y arrive, je te fais signe.
CREATE OR REPLACE PROCEDURE superProcedure
IS
enreg INFRA.nom_client%type;
mavar varchar2(10);
CURSOR c1
Is
select distinct(nom_client) from INFRA where nom_client NOT IN (select client from CLIENT);
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;
EXECUTE superProcedure ;
Pour les curseurs, je te conseille plutot l'utilisation implicite (quoique moi jfais du vrai PL/SQL :-) sous Oracle, et je sais pas si cette fonctionnalité est sous SQL/server) :
ici, ça donnerait :
1) tu ne déclares par enreg
2) tu écris à la place de la LOOP, FETCH
ça clarifie déjà un peu, non ? :)
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
ici, ça donnerait :
1) tu ne déclares par enreg
2) tu écris à la place de la LOOP, FETCH
FOR enreg IN c1
LOOP
mavar := mavar + 1;
INSERT INTO CLIENT values (mavar, enreg);
END LOOP;
ça clarifie déjà un peu, non ? :)
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
Le langage est le PL/SQL dans lequel je suis novice.
Merci