一 游标的分类
在Oracle中提供了两种类型的游标:静态游标和动态游标。
1.静态游标是在编译时知道其SELECT语句的游标。静态游标又分为两种类型,即隐式游标和显式游标。
2.当用户需要为游标使用的查询直到运行的时候才能够确定时,可以使用REF游标(引用游标)和游标变量。使用引用游标必须声明游标变量。引用游标又可以分为两种类型:强类型REF游标和弱类型REF游标。
二 游标的用法
1.显式游标的用法
使用显式游标的4个步骤:
1>声明游标
语法:CURSOR cursor_name [(parameter[,parameter]...)]
[RETURN return_type] IS select_statement;
cursor_name:游标的名称。
parameter:用于为游标指定输入参数。在指定数据类型时,不能使用长度约束。
return_type:定义游标提取的行的类型。
select_statement:游标定义的查询语句。
2>打开游标
语法:OPEN cursor_name[(parameters)];
3>提取游标
语法:FETCH cursor_name INTO variables;
variables:变量名。
4>关闭游标
语法:CLOSE cursor_name;
显式游标使用举例:
1 --显式游标1 2 DECLARE 3 v_name tb_student.stu_name%TYPE; 4 v_sex tb_student.stu_sex%TYPE; 5 v_email tb_student.stu_email%TYPE; 6 CURSOR cur_stu IS 7 SELECT stu_name,stu_sex,stu_email FROM tb_student; 8 BEGIN 9 --打开游标 10 OPEN cur_stu; 11 LOOP 12 FETCH cur_stu INTO v_name,v_sex,v_email; 13 EXIT WHEN cur_stu%NOTFOUND; 14 dbms_output.put_line(v_name||' '||v_sex||' '||v_email); 15 END LOOP; 16 CLOSE cur_stu; 17 END;
2.显式游标属性
1>%FOUND:只有在DML语句影响一行或多行时,%FOUND才返回TRUE。
2>%NOTFOUND:与%FOUND的作用相反。若DML语句没有影响任何行,则返回TRUE。
3>%ROWCOUNT:返回DML语句影响的行数。若没有影响任何行,则返回0。
4>%ISOPEN:返回游标是否已打开的值。在执行SQL语句之后,Oracle自动关闭SQL游标,所有隐式游标的%ISOPEN属性始终为FALSE。