Bonjour,
j'ai effectué une requête simple qui tourne rapidement sur Oracle 10g chez moi. Le problème est que mon environnement au travail est une Oracle 9i. J'attends vos idées pour la faire autrement (y compris en passant par des tables temporaires ou autre). Voici la requête:
où routes(départ(PK)= NUMBER, arrivée= NUMBER, valid=NUMBER) peut être remplie avec le script (très moche) suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 update routes t1 set t1.valid=1 where not exists (select départ,arrivée from routes t2 where t2.arrivée= t1.départ and t2.valid = 0) and t1.valid = 0;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 declare rand BINARY_INTEGER; begin execute immediate 'truncate table routes'; for i in 1..300000 loop SELECT TO_NUMBER(SUBSTR(CURRENT_TIMESTAMP,20,5)) INTO rand FROM dual; INSERT INTO routes VALUES (i,rand,0); end loop; commit; end; /
Pour donner un peu de concret à la chose, imaginez que chaque nombre dans la table est une ville et que chaque ligne de la table "routes" est une route (la direction est importante) allant d'une ville "départ " à une ville "arrivée".
Une ville-départ est une ville où n'arrivent aucune route, mais d'où part une route (oui que une seule route car "départ" est la PK). Le but de cette requête est de noter "valid=1" toutes les routes qui partent d'une ville-départ.
A noter qu'avant de jouer ma requête il faut faire:
Merci d'avance pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 update routes set valid=-1 where départ=arrivée;
Partager