En fait, j'ai vu ce genre de chose utilisé dans les rapports BIRT. La requête passée au runtime BIRT est de la forme:
select a,b,c from t where a = ?
et le '?' est remplacé lors de l'exécution par une valeur de paramètre réelle sélectionnée dans une liste déroulante. Les choix dans le menu déroulant sont donnés par:
select distinct a from t
union all
select '*' from sysibm.sysdummy1
afin que vous obteniez toutes les valeurs possibles plus " *
". Si l'utilisateur sélectionne " *
" dans la liste déroulante (ce qui signifie que toutes les valeurs de a doivent être sélectionnées), la requête doit être modifiée (par Javascript) avant d'être exécutée.
Depuis le "?" est un paramètre positionnel et DOIT y rester pour que d'autres choses fonctionnent, le Javascript modifie la requête pour qu'elle soit:
select a,b,c from t where ((a = ?) or (1==1))
Cela supprime essentiellement l'effet de la clause where tout en laissant le paramètre positionnel en place.
J'ai également vu le cas AND utilisé par les codeurs paresseux lors de la création dynamique d'une requête SQL.
Supposons que vous devez créer dynamiquement une requête qui commence par select * from t
et vérifie:
- le nom est Bob; et
- le salaire est> 20 000 $
certaines personnes ajouteraient le premier avec un OERE et les suivantes avec un ET ainsi:
select * from t where name = 'Bob' and salary > 20000
Les programmeurs paresseux (et ce n'est pas nécessairement un mauvais trait) ne feraient pas de distinction entre les conditions ajoutées, ils commenceraient par select * from t where 1=1
et ajouteraient simplement des clauses AND après cela.
select * from t where 1=1 and name = 'Bob' and salary > 20000