Aslında, BIRT raporlarında kullanılan bu tür şeyleri gördüm. BIRT çalışma zamanına iletilen sorgu şu şekildedir:
select a,b,c from t where a = ?
ve '?' çalışma zamanında bir açılır kutudan seçilen gerçek parametre değeri ile değiştirilir. Açılır menüdeki seçenekler:
select distinct a from t
union all
select '*' from sysibm.sysdummy1
böylece tüm olası değerleri artı " *
" elde edersiniz . Kullanıcı "*
açılır kutudan " (yani a'nın tüm değerleri seçilmelidir), sorgunun çalıştırılmadan önce değiştirilmesi gerekir (Javascript ile).
Beri "?" konumsal bir parametredir ve başka şeylerin çalışması için orada kalması GEREKİR, Javascript sorguyu şu şekilde değiştirir:
select a,b,c from t where ((a = ?) or (1==1))
Bu, temel olarak konum parametresini yerinde bırakırken where yantümcesinin etkisini kaldırır.
Ayrıca dinamik olarak bir SQL sorgusu oluştururken tembel kodlayıcılar tarafından kullanılan AND davasını gördüm.
Dinamik olarak başlayan select * from t
ve kontrol eden bir sorgu oluşturmanız gerektiğini varsayalım:
- adı Bob; ve
- maaş> 20.000 dolar
bazı insanlar ilkini bir NEREYE ve daha sonra bir VE ile eklerler:
select * from t where name = 'Bob' and salary > 20000
Tembel programcılar (ve bu mutlaka kötü bir özellik değildir), eklenen koşullar arasında ayrım yapmazlar, onlarla başlarlar select * from t where 1=1
ve sadece AND cümleleri eklerlerdi.
select * from t where 1=1 and name = 'Bob' and salary > 20000