Bonjour,
je stocke dans une table un ensemble de champs dont une date début et une date fin. Je veux réaliser une procédure qui "supprime une période", c'est à dire :
1. supprime toutes les lignes dont date début ET date fin sont comprises dans la période
2. pour les lignes commençant avant la période, et se terminant après, il faut les scinder en deux lignes, une se terminant juste avant la période, et l'autre commençant juste après.
3. recule la date fin de toutes les lignes se terminant dans la période
4. avance la date début de toutes les lignes commençant dans la période
J'exécute des delete et des update pour les points 1, 3 et 4, mais c'est le deuxième qui me pose problème. J'exécute un select pour trouver toutes les lignes répondant au critère, puis je les parcours et pour chacune, d'abord je l'update en reculant sa date de fin, puis j'insère une nouvelle ligne qui commence juste après la fin de la période.
Si on connait parfaitement la structure de la table, pas de problème pour le select et le insert. Mais j'aimerais pouvoir utiliser cette procédure sans connaitre la structure de la table, à part en sachant qu'elle a un champ DATEDEBUT et un champ DATEFIN.
Dans l'idéal, il me faudrait quelque chose du genre, en pseudo code :
Bien évidemment c'est la dernière instruction que je n'arrive pas à faire. Je voudrais pouvoir dire "recopie moi la ligne à l'identique en changeant un seul champ", et je ne sais pas comment faire, à part en connaissant la structure de la table et en énumérant tous les autres champs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT * FROM table WHERE datedebut < periode.debut AND dateFin > periode.fin FOREACH ligne UPDATE table SET dateFin = periode.debut INSERT INTO TABLE VALUES *, dateDebut = periode.fin END LOOP
Si quelqu'un voit comment faire je suis preneur![]()
Partager