如题,Procedure中的语句: SELECT NVL(SUM(QTY),0) INTO L_TOTALQTY 
 FROM SALES WHERE USERID IN (  l_USERIDLots  );
l_USERIDLots:='123','456','234','678';
结果出来不正确,请教各位高手如何实现??

解决方案 »

  1.   

    如果不是数据问题的话,可能是你用了变量的方式执行,这样是完成的变量绑定,会把'123','456','234','678'当作一个值来做in,所以出现问题。你不能用变量绑定的方式,需要用动态sql的方式来执行。把'SELECT NVL(SUM(QTY),0) INTO L_TOTALQTY 
    FROM SALES WHERE USERID IN (' || l_USERIDLots  || ')'l_USERIDLots:='''123'',''456'',''234'',''678'''; 然后execute immediate sql; 
    这样才行。 切不可execute immediate sql using l_USERIDLots; 
      

  2.   

    楼主说的结果不正确,是有执行结果吗?
    这个语句语法应该通不过的l_USERIDLots:='123','456','234','678'; 
    l_USERIDLots:='''123'',''456'',''234'',''678''';
    l_useridlots如果是作为传入参数,可以这样:
    execute immediate
      'SELECT NVL(SUM(QTY),0) 
      FROM SALES WHERE USERID IN (' || l_USERIDLots  || ')' INTO L_TOTALQTY  ;
      

  3.   

    userid 的类型是什么?varchar 还是 number;
    如果 userid 为 varchar 类型,
    l_useridlots := '''123'',''234'',''456'',''678''';
    如果 userid 为 number 类型,
    l_useridlots := '123,456,234,678';
      

  4.   

    select NVL(SUM(QTY),0) INTO L_TOTALQTY 
    FROM SALES
    where ','||l_USERIDLots||',' like '%'||','||USERID ||','||'%';
      

  5.   

    l_USERIDLots:='''123'',''456'',''234'',''678'''; 
    l_useridlots如果是作为传入参数,可以这样: 
    execute immediate 
      'SELECT NVL(SUM(QTY),0) 
      FROM SALES WHERE USERID IN (' || l_USERIDLots  || ')' INTO L_TOTALQTY  ; 
    5楼的正确。