Bonjour à tous,

Je suis actuellement en train de travailler sur une requête SQL qui me permettrait de mettre à jour le champ d’une table en fonction du contenu de deux autres tables. Mais je galère un peu, je me permets donc de demander votre aide .
Je m’explique:
J’ai trois tables : Ville, Entrepot1 et Entrepot2.
La table Ville contient une clé primaire qui est Name. De même pour les tables Entrepot1 et Entrepot2.
Le champ CityName est une clé étrangère dans Entrepot1 et Entrepot2 du champ Name de la table Ville.
Ci-dessous un exemple du contenu de ces tables.

Ville
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Name          Month        MaxRef
Paris         January       0  
Marseille     February      0

Entrepot1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Name          CityName  Reference
Paris_1       Paris       1
Paris_2       Paris       0
Marseille_1   Marseille   10
Marseille_2   Marseille   0
Entrepot2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Name          CityName  Reference
Paris_3       Paris       0
Paris_4       Paris       1
Paris_5       Paris       50
Marseille_3   Marseille   200
Je cherche, pour chaque ville de la table Ville (donc chaque ligne), à récupérer le maximum du champ Reference des tables Entrepot1 et Entrepot2 pour le CityName correspondant.
Dans mon exemple ci-dessus, pour la ville Paris, dans la table Entrepot1, il y a deux valeurs possibles pour Reference pour Paris: 1 et 0. Dans la table Entrepot2, il y a trois valeurs possibles pour Reference pour Paris: 0, 1 et 50.
Je recherche donc le maximum des deux tables Entrepot1 et Entrepot2, cad : max(1, 0, 0, 1, 50)=50. Cette valeur 50 doit alors être mise dans la table Ville pour le champ Paris.

J’ai commencé à écrire un script PL/SQL, mais j’obtiens l’erreur ORA—00904 (Identificateur non valide), portant a priori sur l'egalité var1.name = var2.name.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
BEGIN
  FOR var1 IN (select v.name as name, max(e.Reference) as eRef from Entrepot1 e, Ville v where e.CityName = v.name group by v.name) LOOP
    BEGIN
      FOR var2 IN (SELECT name, MAXREF FROM Ville) LOOP
        IF (UPPER(var1.name) <> UPPER(var2.name)) THEN
          IF (var1.eRef > var2.MAXREF) THEN
            EXECUTE IMMEDIATE 'update Ville set MAXREF = ' || var1.eRef || ' where name = ' || var1.name;
          END IF;
        END IF;
      END LOOP;
    END;
  END LOOP;
END;
/
J'ai pensé au PL/SQL pour cette manipulation, mais je reste persuadé qu'une simple requête SQL fasse l'affaire.
Si quelqu'un comprend ce que j'ai raconté ici et peut m'aider, je suis preneur .
Merci d'avance pour votre aide.