실제로 BIRT 보고서에 이런 종류의 것들이 사용되는 것을 보았습니다. BIRT 런타임에 전달 된 조회는 다음과 같은 형식입니다.
select a,b,c from t where a = ?
그리고 '?' 런타임시 드롭 다운 상자에서 선택한 실제 매개 변수 값으로 대체됩니다. 드롭 다운에서 선택 사항은 다음과 같습니다.
select distinct a from t
union all
select '*' from sysibm.sysdummy1
가능한 모든 값에 " *
"를 더한 값을 얻습니다 . 사용자 *
가 드롭 다운 상자에서 " "를 선택하면 (a의 모든 값을 선택해야 함) 쿼리를 실행하기 전에 Javascript로 수정해야합니다.
"?"이후 위치 매개 변수이며 다른 작업을 수행하려면 거기에 남아 있어야합니다 .Javascript는 쿼리를 다음과 같이 수정합니다.
select a,b,c from t where ((a = ?) or (1==1))
기본적으로 위치 매개 변수는 그대로두고 where 절의 효과를 제거합니다.
또한 SQL 쿼리를 동적으로 생성하는 동안 게으른 코더가 사용하는 AND 사례도 보았습니다.
다음으로 시작 select * from t
하고 확인 하는 쿼리를 동적으로 작성해야한다고 가정하십시오 .
- 이름은 밥입니다. 과
- 급여는> $ 20,000
어떤 사람들은 첫 번째를 WHERE로 추가하고 후속 사람들은 AND를 추가합니다.
select * from t where name = 'Bob' and salary > 20000
게으른 프로그래머 (그리고 반드시 나쁜 특성은 아닙니다)는 추가 된 조건을 구별하지 않으며, 그 select * from t where 1=1
후에 시작하고 AND 절을 추가합니다.
select * from t where 1=1 and name = 'Bob' and salary > 20000