表aemp为空,vid为空,执行then啊,当然不执行else了

解决方案 »

  1.   

    错拉,是为什么不执行insert into adep values(1000);
      

  2.   

    以為遊標中沒用數據
    過程運行到打開遊標的時候就已經退出了
    FETCH a INTO vid,vname;
    EXIT WHEN  a%NOTFOUND;(第一次打開就已經退出,根本沒有判斷下面的條件)建議修改如下:DECLARE   vid number(10);
      vname varchar2(10);  CURSOR a IS
      SELECT id, name
      from   aemp ;BEGIN  OPEN a;  LOOP
          if vid is null then
             insert into adep values(1000);
          else
             insert into adep values(2000);
          end if;
          FETCH a INTO vid,vname;
          EXIT WHEN  a%NOTFOUND;END LOOP;CLOSE a;commit;
    END;
      

  3.   

    --example:
    SQL> select * from bao_temp
      2  /沒有任何資料列被選取SQL> DECLARE 
      2  
      3    vid number(10);
      4  
      5    CURSOR a IS
      6    SELECT id
      7    from   bao_temp ;
      8  
      9  BEGIN
     10  
     11    OPEN a;
     12  
     13    LOOP
     14  
     15        FETCH a INTO vid;
     16        EXIT WHEN  a%NOTFOUND;
     17  
     18        if vid is null then
     19           insert into bao_temp values(1000);
     20        else
     21           insert into bao_temp values(2000);
     22        end if;
     23  
     24  END LOOP;
     25  
     26  CLOSE a;
     27  
     28  commit;
     29  END;
     30  /PL/SQL 程序順利完成目前歷時: 00:00:00.63
    SQL> select * from bao_temp
      2  /沒有任何資料列被選取目前歷時: 00:00:00.00
    SQL> DECLARE 
      2  
      3    vid number(10);
      4  
      5    CURSOR a IS
      6    SELECT id
      7    from   bao_temp ;
      8  
      9  BEGIN
     10  
     11    OPEN a;
     12  
     13    LOOP
     14        if vid is null then
     15           insert into bao_temp values(1000);
     16        else
     17           insert into bao_temp values(2000);
     18        end if;
     19  
     20        FETCH a INTO vid;
     21        EXIT WHEN  a%NOTFOUND;
     22  
     23  END LOOP;
     24  
     25  CLOSE a;
     26  
     27  commit;
     28  END;
     29  /PL/SQL 程序順利完成目前歷時: 00:00:00.15
    SQL> select * from bao_temp
      2  /        ID
    ----------
          1000目前歷時: 00:00:00.47
      

  4.   

    这是当然的啦
    aemp为空,所以cursor a没有纪录
    当执行到 FETCH a INTO vid,vname; 时,由于a没有纪录,所以a%notfound为true,
    在执行EXIT WHEN  a%NOTFOUND;时跳出循环,后面的那个if。。then..else..endif根本就没有执行
      

  5.   

    先执行
    14        if vid is null then
    可此时还没得到
     20        FETCH a INTO vid;vid,这个变量vid 岂不是成拉不识别的拉?
      

  6.   

    该段引自:http://www.cnblogs.com/sgsoft/archive/2004/10/15/52881.html
    loop
      fetch c_emp into v_id,v_name;  --从游标取数据
      exit when c_emp%notfound ;
     end loop ;我们都还没有取凭什么判断vid的直啊
    14        if vid is null then
      

  7.   

    vid,这个变量vid 岂不是成拉不识别的拉
    vid已經在程序頭上定義了,不會不識別的,樓主你看我覺得的例子就可以的
      

  8.   

    我看懂拉,就是这个地方不明白,是已经在上面定义拉,
    可我们还没从course里取数据这句
    "FETCH a INTO vid;"不是从course里取数据的意思吗
    我们从何判断是vid的直,按照流程: 3    vid number(10);//我懂
    14        if vid is null then//我懂
    20        FETCH a INTO vid;//我也懂我总觉得20应该在案14的前面执行
      

  9.   

    很感谢 baojianjun(包子) 是我钻牛角尖吗?執行的順序是按照代碼的先後來執行的
    同意,可我们还没执行FETCH a INTO vid;//获得游标里的数据
    就判断vid是不是空,我总是不明白