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 :
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).
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 );
Mais ORacle renvoie cette erreur :
Et la ligne 11 colonne 5, c'est le début de la ligne qui suit celle contenant le premier CASE.ORA-00920: opérateur relationnel non valide
00920. 00000 - "invalid relational operator"
*Cause:
*Action:
Erreur à la ligne 11, colonne 5
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 ?
Partager