如下查询语句:
select t.* from t1 t where t.t_number in(
   case t.flag when 1 then ('''001'''||','||'''002''') else ('''003'''||','||'''004''') end
)在表中有符合上述查询的记录,可用以上查询语句查不出结果,我想是不是 case t.flag when 1 then ('''001'''||','||'''002''') else ('''003'''||','||'''004''') end 这句至行的结果是一个字符串,而之后再与in语句结合时整个就被解析为一个完整的字符串了,没有解析逗号运算符把它作为一个集合来处理。请问这种情况有什么解决办法吗?请各位支招啊?说明:'''001'''||','||'''002''' 此字符串是用java程序获取,并接到sql语句中的

解决方案 »

  1.   

    用decode(t.flag,1,'''001'''||','||'''002''','''003'''||','||'''004''')函数也不行啊。。它最综也是返回一个字符串个in ,in()是不是还把它当成一整个字符串解析了。。
      

  2.   

    t_id   t_name  t_number  flag
    1       张三     001       1
    2       李四     002       1
    3       王五     003       1
    4       赵六     004       1
    表数据就是这样的我觉得数据应该没有问,,应为如果下查询:
    select t.* from t1 t where t.t_number in(
      case t.flag when 1 then ('001') else ('003') end
    )或是
    select t.* from t1 t where t.t_number in('001','002') where t.flag=1
    这两种查询方法可以查出结果来的
      

  3.   

    t_id   t_name  t_number  flag
    1       张三     001       1
    2       李四     002       1
    3       王五     003       1
    4       赵六     004       1
    表数据就是这样的我觉得数据应该没有问,,应为如果下查询:
    select t.* from t1 t where t.t_number in(
      case t.flag when 1 then ('001') else ('003') end
    )或是
    select t.* from t1 t where t.t_number in('001','002') where t.flag=1
    这两种查询方法可以查出结果来的
      

  4.   

    动态sql吧  简单的例子
    declare
    str varchar2(200);
    num number ;
    num2 number ;
    begin
    num :=2;
    str := 'select '|| num || ' from dual';
    execute immediate str into num2;
    dbms_output.put_line(num2);
    end;
      

  5.   

    怎么可能不能实现  动态sql俨然可以搞定啊