MAJ d'une table sous SQL Server par insertion

Fermé
igo - 11 juin 2003 à 12:11
batmat Messages postés 1871 Date d'inscription jeudi 1 novembre 2001 Statut Membre Dernière intervention 9 janvier 2008 - 11 juin 2003 à 15:22
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
A voir également:

3 réponses

batmat Messages postés 1871 Date d'inscription jeudi 1 novembre 2001 Statut Membre Dernière intervention 9 janvier 2008 114
11 juin 2003 à 13:01
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 ?
0
Bonjour Batman,

Le langage est le PL/SQL dans lequel je suis novice.

Merci
0
batmat Messages postés 1871 Date d'inscription jeudi 1 novembre 2001 Statut Membre Dernière intervention 9 janvier 2008 114
11 juin 2003 à 14:51
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 ?
0
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 ;
0
batmat Messages postés 1871 Date d'inscription jeudi 1 novembre 2001 Statut Membre Dernière intervention 9 janvier 2008 114
11 juin 2003 à 15:22
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

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 ?
0