二、显示游标
1.显示游标的使用
当需要准确的控制查询的数据,在PL/SQL块,子程序或包的声明部分显示声明一个游标。
可以使用三个命令控制一个游标:open,fetch和close,首先,使用open语句来初始化游标,它定义了结果集。然后,执行fetch得到所有的行,或者用bulk collect子句在一个时间点获取所以行.当最后一行处理完后,使用close语句来释放游标
/*****************************
名称:
功能描述:显示游标的使用
变量命名:
输入变量
输出变量
输入输出变量
普通变量:v_/v v_user_id/vuserid
游标:cur_ cur_userinfo
*****************************/
declare
cursor cur_emp is select * from emp; --声明游标
v_emp emp%rowtype; --保存游标中的每一行
begin
open cur_emp; --打开游标
loop
fetch cur_emp into v_emp; --提取一行保存到记录变量
exit when cur_emp%notfound;
dbms_output.put_line(v_emp.ename||','||to_char(v_emp.sal));
end loop;
close cur_emp; --关闭游标
end;
由于dbms_output.put_line中的变量是字符串,所以v_emp.sal要用to_char来转换.
2.bulk collect
3.显示游标的属性
%FOUND :有一行被获取
当一个游标或游标变量被打开但第一次获取之前,%found返回null.获取之后,最后一次获取返回一行都返回true,最后一次获取没有返回一行返回false.
/*****************************
名称:
功能描述:%fonud属性
变量命名:
普通变量:v_/v v_user_id/vuserid
游标:cur_ cur_userinfo
*****************************/
DECLARE
CURSOR cur_emp IS SELECT ename, sal FROM emp WHERE ROWNUM < 11;
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
OPEN cur_emp;
IF (cur_emp%found is null) THEN
DBMS_OUTPUT.PUT_LINE('NULL');
END IF;
LOOP
FETCH cur_emp INTO v_ename, v_sal;
IF cur_emp%FOUND THEN -- fetch succeeded
DBMS_OUTPUT.PUT_LINE('Name = ' || v_ename || ', salary = ' ||v_sal);
ELSE -- fetch failed, so exit loop
EXIT;
END IF;
END LOOP;
CLOSE cur_emp;
END;
输出结果:
NULL
Name = SMITH, salary = 800
Name = ALLEN, salary = 1600
Name = WARD, salary = 1250
Name = JONES, salary = 2975
Name = MARTIN, salary = 1250
Name = BLAKE, salary = 4000
Name = CLARK, salary = 4000
Name = SCOTT, salary = 4000
Name = KING, salary = 5000
Name = TURNER, salary = 1500
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26937943/viewspace-1065227/ ,如需转载,请注明出处,否则将追究法律责任。