显式光标属性
语法格式:光标名%属性名
显式光标和光标变量拥有相同的属性。
如果显式光标没有打开,则引用%ISOPEN之外的属性,都会引发INVALID_CURSOR异常。
(1)%ISOPEN
如果光标打开了返回TRUE,否则返回FALSE。
该属性用于:
n 在打开光标之前用于检查显式光标没有打开,如果打开一个已经打开的显式光标,则会引发CURSOR_ALREADY_OPEN异常。(不适用于光标变量,因为光标变量可以随意打开)
n 在关闭光标之前,检查显式光标已经打开。
|
DECLARE CURSOR c1 IS SELECT last_name, salary FROM employees WHERE ROWNUM < 11;
the_name employees.last_name%TYPE; the_salary employees.salary%TYPE; BEGIN IF NOT c1%ISOPEN THEN OPEN c1; END IF;
FETCH c1 INTO the_name, the_salary; dbms_output.put_line(the_name || ', ' || the_salary); IF c1%ISOPEN THEN CLOSE c1; END IF;
END;
|
(2)%FOUND
n NULL-光标打开之后,获取数据之前
n TRUE-如果最近一次FETCH返回一行
n FALSE-其它
用于判断是否有取回的行,对它进行处理。
|
DECLARE CURSOR c1 IS SELECT last_name, salary FROM employees WHERE ROWNUM < 11 ORDER BY last_name;
my_ename employees.last_name%TYPE; my_salary employees.salary%TYPE; BEGIN OPEN c1; LOOP FETCH c1 INTO my_ename, my_salary; IF c1%FOUND THEN --成功获取 DBMS_OUTPUT.PUT_LINE('姓名 = ' || my_ename || ', 薪水 = ' || my_salary); ELSE EXIT; END IF; END LOOP;
END;
|
(3)%NOTFOUND
n NULL-光标打开之后,获取数据之前
n FALSE-如果最近一次FETCH返回一行
n TRUE-其它
用于退出循环。
|
DECLARE CURSOR c1 IS SELECT last_name, salary FROM employees WHERE ROWNUM < 11 ORDER BY last_name;
my_ename employees.last_name%TYPE; my_salary employees.salary%TYPE; BEGIN OPEN c1; LOOP FETCH c1 INTO my_ename, my_salary; IF c1%NOTFOUND THEN EXIT; ELSE DBMS_OUTPUT.PUT_LINE('姓名 = ' || my_ename || ', 薪水 = ' || my_salary); END IF; END LOOP;
END;
--注意,如果fetch从未获取过行,则%notfound始终为null,则循环不会退出,为了避免无限循环,建议使用下面的判断语句:exit when c1%notfound or (c1%notfound is null) |
(4)%ROWCOUNT
n 0-光标打开之后,获取数据之前
n 获取的行的数量-其它
|
DECLARE CURSOR c1 IS SELECT last_name FROM employees WHERE ROWNUM < 11 ORDER BY last_name;
name employees.last_name%TYPE; BEGIN OPEN c1; LOOP FETCH c1 INTO name; EXIT WHEN c1%NOTFOUND OR c1%NOTFOUND IS NULL; DBMS_OUTPUT.PUT_LINE(c1%ROWCOUNT || '. ' || name); IF c1%ROWCOUNT = 5 THEN DBMS_OUTPUT.PUT_LINE('--- 获取5行记录 ---'); END IF; END LOOP; CLOSE c1;
END;
|
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1122708/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17013648/viewspace-1122708/
本文详细介绍了显式光标的各种属性,包括%ISOPEN、%FOUND、%NOTFOUND及%ROWCOUNT等,并通过具体示例展示了如何在PL/SQL中使用这些属性来控制和监测数据的检索过程。




6163

被折叠的 条评论
为什么被折叠?



