游标的概念和作用及使用实例

来源:互联网 发布:上海软件测试工资 编辑:程序博客网 时间:2024/04/27 06:19
游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标充当指针的作用。尽管游标能遍历结果中的所有行,但他一次只指向一行。

概括来讲,SQL的游标是一种临时的数据库对象,即可以用来存放在数据库表中的数据行副本,也可以指向存储在数据库中的数据行的指针。游标提供了在逐行的基础上操作表中数据的方法。

游标的一个常见用途就是保存查询结果,以便以后使用。游标的结果集是由SELECT语句产生,如果处理过程需要重复使用一个记录集,那么创建一次游标而重复使用若干次,比重复查询数据库要快的多。


大部分程序数据设计语言都能使用游标来检索SQL数据库中的数据,在程序中嵌入游标和在程序中嵌入SQL语句相同。

一、游标简介:

    游标是PL&SQL中的一种控制结构。可以分为显式游标和隐式游标。pl&sql会为每一条select语句创建隐式游标。但是当我们需要处理多条数据时,我们就需要创建显式游标。注意:游标不是模式对象。

 

二、游标的几种常见属性:

1、%FOUND

--判断游标中是否还有数据,若有,返回true,否则,返回false。

2、%NOTFOUND

--与%FOUND 相反

3、%ISOPEN

--判断游标是否为打开状态

4、%ROWCOUNT

--记录已从游标中取出的记录数

 

三、游标应用实例:

 

1、%FOUND属性的使用

DECLARE
CURSOR mycur IS
SELECT * FROM student;
myrecord student%ROWTYPE;
BEGIN
OPEN mycur;
FETCH mycur INTO myrecord;
WHILE mycur%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(myrecord.stuno||','||myrecord.stuname);
FETCH mycur INTO myrecord;
END LOOP;
CLOSE mycur;
END;

 

2、%NOTFOUND属性的使用:

DECLARE
CURSOR cur_para(id varchar2) IS
SELECT stuname FROM student WHERE stuno=111;
t_name student.stuname%TYPE;
BEGIN
OPEN cur_para(111);
LOOP
FETCH cur_para INTO t_name;
EXIT WHEN cur_para%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(t_name);
END LOOP;
CLOSE cur_para;
END;

 

3、for循环中游标的特殊使用:


SQL> DECLARE
  2  CURSOR cur_para(id varchar2) IS
  3  SELECT stuname FROM student WHERE stuno=id;
  4  BEGIN
  5  DBMS_OUTPUT.PUT_LINE('*****');
  6  FOR cur IN cur_para('111') LOOP
  7  DBMS_OUTPUT.PUT_LINE(cur.stuname);
  8  END LOOP;
  9  END;

 

4、%ISOPEN属性的使用:

SQL> DECLARE
  2  t_name student.stuname%TYPE;
  3  CURSOR cur(id varchar2) IS
  4  SELECT stuname FROM student WHERE stuno=id;
  5  BEGIN
  6  IF cur%ISOPEN THEN
  7  DBMS_OUTPUT.PUT_LINE('THE cur has been opened');
  8  ELSE
  9  OPEN cur('111');
 10  END IF;
 11  FETCH cur INTO t_name;
 12  CLOSE cur;
 13  DBMS_OUTPUT.PUT_LINE(t_name);
 14  END;

 

5、%ROWCOUNT属性的使用:

SQL> DECLARE
  2  t_name VARCHAR2(10);
  3  CURSOR mycur IS
  4  SELECT stuname FROM student;
  5  BEGIN
  6  OPEN mycur;
  7  LOOP
  8  EXIT WHEN mycur%NOTFOUND OR mycur%NOTFOUND IS NULL;
  9  DBMS_OUTPUT.PUT_LINE('*****ROWCOUNT****'||mycur%ROWCOUNT);
 10  END LOOP;
 11  CLOSE mycur;
 12  END;


0 0
原创粉丝点击