declare
  l_str1 varchar2(1000);
  l_str2 varchar2(1000);
  l_num number;
begin
  l_str1 := '(''广州市安达汽车零件有限公司'',''湖南机油泵股份有限公司'')';
  select to_char(l_str1) into l_str2 from dual;
  select count(*) into l_num from supplier s where s.sup_name in l_str1;
  dbms_output.put_line(l_num);
end;
l_str1这个条件在表supplier有两条记录的,但为什么这样查询后变为0条。语法没有错误的。

解决方案 »

  1.   

    这种写法是错误的
    in里面应该是一个集合,你却给了一个字符,这样肯定查不出来了直接这样写吧:
    select count(*) into l_num from supplier s where s.sup_name in 
    ('广州市安达汽车零件有限公司','湖南机油泵股份有限公司')
      

  2.   

    如楼上所说,in后面应该跟一个结果集 如: in('a','b')
    也可以是一个子查询  in(select a from tab)
    如果是单个变量直接用 = 就好了
      

  3.   

    还是在里面用动态sql拼接起来吧。 
      

  4.   

    这个查询条件是页面某个字段输入多值需要传给sql语句的呢?
      

  5.   

    只能是往sql里传参(这种拼接的字符串),不能使用动态的sql语句...
      

  6.   


    楼主应该懂得in的语法?
    对传进来的参数进行分割,动态sql实现