Bonjour,

Lié à mon problème de MERGE, j'ai essayé ce type de requête pour voir si une mise à jour de la table par rapport à sa référence est nécessaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
SELECT *
FROM PLEMENAGER.TYPE_POPULATION rf
WHERE NOT EXISTS
(
  SELECT *
  FROM GRHUM.TYPE_POPULATION act
  WHERE act.C_TYPE_POPULATION = rf.C_TYPE_POPULATION
    AND act.LC_TYPE_POPULATION = rf.LC_TYPE_POPULATION
    AND act.LL_TYPE_POPULATION = rf.LL_TYPE_POPULATION
    AND CASE WHEN act.REF_REGLEMENTAIRE IS NULL AND rf.REF_REGLEMENTAIRE IS NULL THEN TRUE ELSE FALSE END
    AND act.TEM_FONCTIONNAIRE = rf.TEM_FONCTIONNAIRE
    AND act.TEM_ATOS = rf.TEM_ATOS
    AND act.TEM_ITARF = rf.TEM_ITARF
    AND act.TEM_ENS_SUP = rf.TEM_ENS_SUP
    AND act.TEM_ENSEIGNANT = rf.TEM_ENSEIGNANT
    AND act.TEM_2DEGRE = rf.TEM_2DEGRE
    AND act.TEM_HOSPITALIER = rf.TEM_HOSPITALIER
    AND act.TEM_BIBLIO = rf.TEM_BIBLIO
    AND act.TEM_CARRIERE = rf.TEM_CARRIERE
    AND act.D_CREATION = rf.D_CREATION
    AND act.D_MODIFICATION = rf.D_MODIFICATION
    AND act.TEM_1DEGRE = rf.TEM_1DEGRE
    AND act.TEM_VISIBLE = rf.TEM_VISIBLE
    AND CASE WHEN act.D_OUVERTURE IS NULL AND rf.D_OUVERTURE IS NULL THEN TRUE ELSE FALSE END
    AND CASE WHEN act.D_FERMETURE IS NULL AND rf.D_FERMETURE IS NULL THEN TRUE ELSE FALSE END
);
J'ai utilisé des case parce que je ne pouvais pas utiliser l'égalité sur les colonnes contenant des NULL (en logique SQL, NULL <> NULL).

Mais ORacle renvoie cette erreur :
ORA-00920: opérateur relationnel non valide
00920. 00000 - "invalid relational operator"
*Cause:
*Action:
Erreur à la ligne 11, colonne 5
Et la ligne 11 colonne 5, c'est le début de la ligne qui suit celle contenant le premier CASE.
J'ai essayé d'encadrer le CASE avec des parenthèses mais ça ne change rien.

Que c'est qui ne va pas dans ma requête ?