你的游标是什么语句啊?这些在游标内部执行不就行了吗。只是三个赋值语句还要用游标吗?
PILASTBIN和PIFIRSTBIN是哪来的?

解决方案 »

  1.   

    我写的不详细.大概就是这个思路:DECLARE
    l_sql VARCHAR2(20);
    ...
    BEGIN
       l_sql :='select nvl(sum(fqty),0) into vpickqty from table1 where ';
       IF ... THEN
        l_sql :=l_sql ||' f2 <= PILASTBIN';
        
       ELSIF ... THEN
         l_sql :=l_sql ||' f1 >= PIFIRSTBIN';
       END IF;
       ...
       END;
      

  2.   

    如果f1和f2的值不可能为NULL,那么可以这样写
    select nvl(sum(fqty),0) into vpickqty from table1
          where f1 >= nvl(PIFIRSTBIN,f1)
            and f2 <= nvl(PILASTBIN,f2);
      

  3.   

    TO  liuyi8903(好好学习):
    那l_sql什么时候执行?即vpickqty这个变量什么时候会有值啊?
      

  4.   

    TO sasacat(傻傻猫) :
    我的意思是我的游标里的select语句也得根据传入的PIFIRSTBIN和PILASTBIN参数才能确定WHERE语句的写法,就像是      
          select nvl(sum(fqty),0) into vpickqty from table1
          where f1 >= PIFIRSTBIN
            and f2 <= PILASTBIN;
    这条语句一样。
    比如说,
    cursor c1(pifirstbin in varchar, pilastbin in varchar)
    is
      select * from table1  
      where f1 >= PIFIRSTBIN
        and f2 <= PILASTBIN;
    这里面的WHERE语句也得根据PIFIRSTBIN和PILASTBIN是否为空才能确定具体的SQL语句啊难道要写三个游标?
     
      

  5.   

    TO bobfang(匆匆过客) :这条语句执行出来后,没有一条记录啊当PIFIRSTBIN和PILASTBIN为NULL时f1和f2不为NULL值:
    select nvl(sum(fqty),0) into vpickqty from table1
          where f1 >= nvl(PIFIRSTBIN,f1)
            and f2 <= nvl(PILASTBIN,f2);
      

  6.   

    select nvl(sum(fqty),0) into vpickqty from table1
          where ((f2 <= PILASTBIN)or(PILASTBIN = ''))
          and ((f1 >= PIFIRSTBIN)or(PIFIRSTBIN=''))
      

  7.   

    应该不会没有记录的。你直接执行select nvl(sum(fqty),0) into vpickqty from table1的结果呢?
    还有就是可以按sasacat(傻傻猫) 的写法,不过把=''改为is null。
    select nvl(sum(fqty),0) into vpickqty from table1
          where ((f2 <= PILASTBIN)or(PILASTBIN is null))
          and ((f1 >= PIFIRSTBIN)or(PIFIRSTBIN is null))
      

  8.   

    嗯.是的.我的语句忘了执行:)加上一句:
    execute immediate l_sql;
      

  9.   

    执行
    动态sqlexecute immediate sql;