Le mot-cle WITH sert juste a nommer une sous-requête dont le résultat donne une table temporaire utilisable dans une clause FROM d'une requête parente. Dans d'autres moteurs on peut mette la sous requête directement dans la clause FROM ou dans un JOIN (interne ou externe) simplement entre parenthèse suivi éventuellement d'un nom d'Alias pour cette table temporaire. Dans d'autres comme Sybase ou MSSQL on peut grouper toutes les tables danscka clause FROM et faire le reste dans les clauses WHERE ou GROUP BY avec une syntaxe etendue pour les jointures ouvertes. Et sous Oracle et Informix il y a encore d'autres possibilités avec les requêtes hiérarchiques. Enfin dans les principaux moteurs on a des procédures stockées permettant d'utiliser des curseurs explicites (sous oracle, Sybase mssql ca marchevtres bien et c'est performant. Un peu moins sous Informix qui a des limitations parfois très chiantes si les tables incluent des blobs car car leur utilisation via des curseurs casse les transactions etvkacces aux blobs est difficile alors a lier aux tables temporaires decka table maitre ce quinobluge a passer par des tables permanentes et faire du nettoyage manuel et gérer ses propres verrous dans une table annexe.... Pas très propre on doit avoir un bot régulier pour ralasser les miettes utilisees temporairement sinon la base se remplit vite avec des donnees temporaires de vieilles transactions. Selon le moteur sous jascent les solutions exustent mais ca demande des méthodes différentes. Mais on peut se passer de développer un client en C ou PHP. Sous MySQL en revanche c'est très pauvre et le client reste necessaire. Mais il existe certains clients specialisises pour les cubes d'analyse statistique ou pour le reporting complexe tel que les applis comptables et de facturation ou gestion de logistique et ressources avec plein de regles métier qui changent sans arret duvfaitvdes lois ou de la politique commerciale évolutive. J'utilise pas mal BO pour ca. Mais sous Oracle je préfère faire du PL*SQL en procédures stockées ou de petites classes java qu'on peut aussi stocker et décrire comme si c'était des vues ou des tables et qu'on peut synchroniser avec les transactions même si elles sont distribuées sur plusieurs serveurs avec un moniteur transactionnel et du commit multiphase et meme des points de reprise partiel pour éviter de tout abandonner et recommencer quand on requête une base en live avec des accès concurrents imprevisibles donc sans mètre la base offline pour le temps d'un batch compliqué Le 11 déc. 2014 20:22, "Christian Quest" <[email protected]> a écrit :
> Ah ok, un WITH/SELECT/UPDATE doit permettre de faire ça. > > WITH u as (SELECT t1.id, t2.temps*1.5 as temps FROM latable t1 JOIN > latable t2 ON (t2.id=t1.id-1) WHERE t1.temps IS NULL AND t2.temps IS NOT > NULL) > UPDATE latable FROM u SET temps=u.temps WHERE id=u.id; > > L'idée c'est que le SELECT sort la liste des updates à faire et le WITH > les passe à l'UPDATE... > Là, le SELECT devrait sortir l'id et la valeur calculée de temps. > > Plus de doc sur ce "WITH" magique ici: > http://docs.postgresql.fr/9.3/queries-with.html > > Tu va voir c'est mortel comme truc car ça peut être récursif :) > > > Le 11 décembre 2014 19:52, didier2020 <[email protected]> a écrit : > >> Le jeudi 11 décembre 2014 à 18:37 +0100, sly (sylvain letuffe) a >> écrit : >> > On jeudi 11 décembre 2014, didier2020 wrote: >> > > une troncon de route n'a pas de comptage/temps, >> > > mettre a jour ce troncon en prenant comme modele les données du >> troncon >> > > en amont/précédent avec un coef d'ajustement lié aux caractéristiques >> > > des 2 troncon. >> > >> > Et si tu est présenté avec 3 tronçons consécutifs (t1,t2,t3) dont tu >> ignores >> > le temps, tu fais quoi pour t2 ? >> ce n'est pas ce que désire faire, ce serait plutot >> t1 et t3 connu >> analyse les données de t1 et t3, puis essayer de corriger t2 >> la requete n'etant la que pour ne pas creer des paliers de temps >> >> > Tu calculs t1 d'abord et tu repasses ton algo pour trouver t2 ? >> > Et si tu as 30 tronçons consécutifs ? une.... boucle ? >> > gestion des valeurs invalides ? vitesse max : -5 ou 0 ou 250 ? >> > Y'a un moment où SQL ne suffit plus, ma philosophie de >> développement+sgbd : >> > Dès que je suis tenté de mettre un if, c'est qu'il ne faut plus faire >> ça en >> > SQL ;-) >> >> >> >> >> >> >> >> _______________________________________________ >> dev-fr mailing list >> [email protected] >> https://lists.openstreetmap.org/listinfo/dev-fr >> > > > > -- > Christian Quest - OpenStreetMap France > > _______________________________________________ > dev-fr mailing list > [email protected] > https://lists.openstreetmap.org/listinfo/dev-fr > >
_______________________________________________ dev-fr mailing list [email protected] https://lists.openstreetmap.org/listinfo/dev-fr
