DECLARE
cursor employee_cursor is
select emp_id, emp_name from employees;
id_num employees.emp_id%TYPE;
name employees.emp_name%TYPE;
BEGIN
open employee_cursor;
loop
fetch employee_cursor into id_num, name;
end loop;
close employee_cursor;
END1,我想知道,如果employees表里有多个行,那么游标employee_cursor是怎么指向的?指向第一行吗?
2,fetch employee_cursor into id_num, name;
 这个语句是取出表中相应类型的数据赋值给id_num, name,那么这个表中那么多行,到底是取出哪一行的数据赋值给那两个变量呢?

解决方案 »

  1.   

    DECLARE
      cursor employee_cursor is
        select emp_id, emp_name from employees;
      id_num employees.emp_id%TYPE;
      name   employees.emp_name%TYPE;
    BEGIN
      open employee_cursor;
      loop
        fetch employee_cursor
          into id_num, name;
        EXIT WHEN  employee_cursor%NOTFOUND;   
      end loop;
      close employee_cursor;
    END
      

  2.   

    employees循环,逐行赋值给id_num, name
      

  3.   


    1.fetch一次指向一行,再fetch,指向下一行,如果EMPLOYEE_CURSOR%NOTFOUND,退出。代码写的有问题,修改下:
    DECLARE
      CURSOR EMPLOYEE_CURSOR IS
        SELECT EMP_ID, EMP_NAME FROM EMPLOYEES;
      ID_NUM EMPLOYEES.EMP_ID%TYPE;
      NAME   EMPLOYEES.EMP_NAME%TYPE;
    BEGIN
      OPEN EMPLOYEE_CURSOR;
      LOOP
        FETCH EMPLOYEE_CURSOR
          INTO ID_NUM, NAME;
       EXIT WHEN EMPLOYEE_CURSOR%NOTFOUND;
      END LOOP;
      CLOSE EMPLOYEE_CURSOR;
    END;
    /
      

  4.   

    这个表中那么多行,那么游标的取值会按你SQL语句取的顺序一条一条赋值变量id_num, name
      

  5.   

    使用游标的目的就是要对表中数据一行一行的处理,执行一次fetch,就会读取一行数据,直到读完为止,当你fetch一条记录后,对这行记录进行处理,通过loop循环,再执行fetch,这是读的就是下一行的数据了.
    DECLARE
      CURSOR EMPLOYEE_CURSOR IS
        SELECT EMP_ID, EMP_NAME FROM EMPLOYEES;
      ID_NUM EMPLOYEES.EMP_ID%TYPE;
      NAME   EMPLOYEES.EMP_NAME%TYPE;
    BEGIN
      OPEN EMPLOYEE_CURSOR;
      LOOP
        FETCH EMPLOYEE_CURSOR
          INTO ID_NUM, NAME;
       EXIT WHEN EMPLOYEE_CURSOR%NOTFOUND;
      END LOOP;
      CLOSE EMPLOYEE_CURSOR;
    END;