1.找出下面存储过程错误
declare
begin
   vn_loop=0;
   open get serv_id;
loop
   fetch get serv_id into:vn_serv_id;
   exit when get_ser_id% not found;
   vn_loop++;
   if vn_loop>=1000
   dbms_output.put(vn_loop);
   end if;
end loop;
end 2.SELECT A.EMP_NAME,B.EDPT.NAME FROM EMP A,DEPT B WHERE A.DEPT_ID(+)=B.DEPT_ID   +号的用法

解决方案 »

  1.   

    declare
    begin
    vn_loop int=0;定义类型
    cursor get_serv_id is select * from emp;定义游标
    open get_serv_id;
    loop
    fetch get_serv_id into:vn_serv_id;   --:vn_serv_id没有定义
    exit when get_ser_id%notfound; notfound 的个关键字不能拆分,并且这句应该放到循环的最后
    vn_loop++; oracle没有++这个运算符 改成vn_loop:=vn_loop+1;
    if vn_loop>=1000 
    dbms_output.put(vn_loop);
    end if;
    end loop;
    end 
      

  2.   

    (+)等同于连接,放在左边叫左关联,等同于SQL里的LEFT JOIN 
    放右边以此类推
      

  3.   

    1  错误不是一般的多DECLARE
      vn_loop NUMBER;
      vn_serv_id NUMBER;
      CURSOR get_serv_id IS
         SELECT empno FROM emp;
    begin
       vn_loop:=0;
       open get_serv_id;
       loop
          fetch get_serv_id INTO vn_serv_id;
          exit when get_serv_id%NOTFOUND;
          vn_loop := vn_loop+1;
          if vn_loop>=1000 THEN
             dbms_output.put_line(vn_loop);
          end if;
       end loop;
    END;
    2   右连接,返回B表里的所有EDPT_NAME,包括不满足连接条件的。
      

  4.   

    汗,还少了close get_serv_id;
    一不小心就陷阱…………
    最后一段加上dbms_output.put_line(vn_loop);
    end if;
    end loop;
    close get_serv_id;
    END;
      

  5.   


    游标还要记得关闭close get_serv_id;