Ce n'est pas possible directement, car chronologiquement, WHERE se produit avant SELECT, qui est toujours la dernière étape de la chaîne d'exécution.
Vous pouvez faire une sous-sélection et filtrer dessus :
SELECT * FROM
(
SELECT A.identifier
, A.name
, TO_NUMBER(DECODE( A.month_no
, 1, 200803
, 2, 200804
, 3, 200805
, 4, 200806
, 5, 200807
, 6, 200808
, 7, 200809
, 8, 200810
, 9, 200811
, 10, 200812
, 11, 200701
, 12, 200702
, NULL)) as MONTH_NO
, TO_NUMBER(TO_CHAR(B.last_update_date, 'YYYYMM')) as UPD_DATE
FROM table_a A
, table_b B
WHERE A.identifier = B.identifier
) AS inner_table
WHERE
MONTH_NO > UPD_DATE
Des informations intéressantes ont été extraites des commentaires :
Il ne devrait y avoir aucun impact sur les performances. Oracle n'a pas besoin de matérialiser les requêtes internes avant d'appliquer les conditions externes. Oracle envisagera de transformer cette requête en interne et de pousser le prédicat vers le bas dans la requête interne et le fera si cela est rentable. – Justin Cave