日期:2014-05-17  浏览次数:20933 次

一个select语句,where条件是有选择的添加,怎么写?
select * from 表A
where 表A.id = xxx --这一条件是当某变量nos值为'id'时追加
and 表A.name = xxx --这一条件是当某变量lng值为'name'时追加
and 表A.data = xxx --这一条件是当某变量pid值为'data'时追加

即分别判断变量nos,lng,pid的值,值符合要求时,才追加相应的条件,值不符时,不追加该条件
如果三个变量值都不符合,实际就等同于
select * from 表A

也有可能是这样,只有lng值符合,则等同于
select * from 表A where 表A.name = xxx


请问怎么写?case when能做到吗?要进行语句拼接吗?

------解决方案--------------------
var
sSql varchar2(2000);
begin
sSql := ' select * from 表A where 1=1 ';
if nos = 'id' then
sSql := sSql||' and 表A.id = xxx ';
if lng = 'name' then
sSql := sSql||' and 表A.name = xxx ';
if pid = 'data' then
sSql := sSql||' and 表A.data = xxx '; 
execute immediate sSql;
end;