cursor
1.2显示游标
显示游标用来处理返回多于一行的SELECT语句。
显示游标的处理包括四个步骤:①声明游标②打开游标③提取fetch结果到PL/SQL变量中④关闭游标
CURSOR cursor_name IS SELECT_statement; --声明游标
OPEN cursor_name; --打开游标
--打开游标时会进行如下活动:检查绑定变量bind variable的取值 ,活动集被确定,活动集active set的指针指向第一行
仅在cursor打开时刻对绑定变量进行检查,活动集被确定
FETCH cursor_name INTO list_of_variables;
或
FETCH cursor_name INTO PL/SQL_record;
CLOSE cursor_name;
例子:
-- Created on 2011/6/10 by SUN
declare
-- Local variables here
v_StudentID students.id%TYPE;
v_firstname students.first_name%TYPE;
v_lastname students.last_name%TYPE;
-- v_major students.major%TYPE;
CURSOR c_students(v_major students.major%TYPE) IS
SELECT id,first_name,last_name
FROM students
WHERE major=v_major;
begin
-- v_major:='Computer Science';
-- v_major:='Economics';
OPEN c_students('Computer Science');
-- v_major :='Computer Science';
LOOP
FETCH c_students INTO v_studentid,v_firstname,v_lastname;
EXIT WHEN c_students%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_studentid);
DBMS_OUTPUT.PUT_LINE(v_firstname);
DBMS_OUTPUT.PUT_LINE(v_lastname);
END LOOP;
CLOSE c_students;
--ORA-01001:invalid cursor FETCH c_students INTO v_studentid,v_firstname,v_lastname;
end;
1.3隐式游标
SQL cursor不被程序打开和关闭,PL/SQL隐式地打开SQL游标,处理其中的SQL语句,然后关闭该游标。隐式的游标用户处理INSERT、UPDATE、DELETE和单行的SELECT...INTO语句。因为SQL cursor是通过PL/SQL engine 打开和关闭的,所有OPEN、FETCH和CLOSE命令是无关闭的。
1.4NO_DATA_FOUND和%NOTFOUND
当SELECT...INTO语句没有找到时触发NO_DATA_FOUND
WHERE子句触发%NOTFOUND 值为TRUE
UPDATE或DELETE语句的WHERE语句触发SQL%NOTFOUND值为TRUE