select * from so_sale where ((decode(#pkcorp#,null,'a',so_sale_pk_corp) in (decode(#pkcorp#,null,'a',#pkcorp#))
请问这个语句有什么地方错误么,其中(#pkcorp#参数已定义).

解决方案 »

  1.   

    为什么当#pkcorp#参数是单值的时候能查的出数据。多值(2个以上)的时候查出来的数据就是空白的呢,初学者!请大家多多指教
      

  2.   

    你这条语句多了2个括号了吧。还有你的#pkcorp#的值是什么样的形式,写出来看下
      

  3.   

    select * from so_sale where decode(#pkcorp#,null,'a',so_sale_pk_corp) in (decode(#pkcorp#,null,'a',#pkcorp#)) 
      

  4.   

    首先谢谢楼上几位哥们的回复。也许我表达的不够清楚
    其实主要是为了判断,#pkcorp#这个参数单值的形式是(‘a’),多值的话是(‘a’,‘b’)
    要想实现的功能就是当#pkcorp#值为空的时候,就没有查询条件(相当于a=a),能全部查出来,如果有值的话(假设值为a)
    那就相当于select * from so_sale where so_sale_pk_corp in(‘a’)
    我现在碰到的问题是为多值的时候,decode语句不起作用。select * from so_sale where decode(#pkcorp#,null,'a',so_sale_pk_corp) in (decode(#pkcorp#,null,'a',#pkcorp#)) 
    这个语句就通不过,实在是搞不明白。
    请大家帮忙解决下。实在感谢!!
      

  5.   

    DECODE的语法格式如下: 
    DECODE(input_value,value,result[,value,result…][,default_result]); 
    其中: 
    input_value 试图处理的数值。DECODE函数将该数值与一系列的序偶相比较,以决定最后的返回结果 
    value 是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。对应一个空的返回值,可以使用关键字NULL于之对应 
    result 是一组成序偶的结果值 
    default_result 未能与任何一序偶匹配成功时,函数返回的默认值 其输入值只能是单值.你的#pkcorp#为多值时,该函数把第一个值后的其它输入值当作了函数的value参数.
      

  6.   

    请问有办法解决么。其实我想要的结果很简单,对于decode(#pkcorp#,null,'a',so_sale_pk_corp) in (decode(#pkcorp#,null,'a',#pkcorp#)这个语句
    就是判断#pkcorp#是否有值,如果有值的话就返回 so_sale_pk_corp in (#pkcorp#) 反之就返回 a=a 也就是全部返回就是想得到这个结果。。请问能否实现呢?