游标


游标

文章插图
游标【游标】游标(cursor)也被称为游标 。Oracle 使用两种游标:显示游标和隐式游标 。不管语句返回多少条纪录,PL/SQL 为使用的每一条 UPDATE 、 DELETE 和 INSERT 等 SQL 命令隐式的声明一个游标 。
当你在一个文本框或某种程式中输入文字时,总有一个游标来显示你将要输入文字的位置 。现在大部分的游标都为一个小竖线,规则的闪动.而在DOS下有些游标则是短短的小横线,同样规则的闪动.现用的windows游标是一个图像,可以是动态的也可以是静态的,在不同情况下样子也不同 。
基本介绍中文名:游标
外文名:cursor
别名:游标
分类:显示游标和隐式游标
所属类别:计算机
用途:输入文字
计算机术语当你在一个文本框或某种程式中输入文字时,总有一个游标来显示你将要输入文字的位置 。现在大部分的游标都为一个小竖线,规则的闪动.而在DOS下有些游标则是短短的小横线,同样规则的闪动.现用的windows游标是一个图像,可以是动态的也可以是静态的,在不同情况下样子也不同 。资料库中的游标(要管理 SQL 语句的处理,必须隐式的给它定义一个游标 。)用户声明并使用显示游标处理 SELECT 语句返回的多条记录 。显示的定义游标是一种结构,它使用户能够为特定的语句指定记忆体区域,以便以后使用 。当 PL/SQL 游标查询返回多行数据时,这些记录组被称为活动集 。Oracle 将这种活动集存储在您创建的显示定义的已命名的游标中 。Oracle 游标是一种用于轻鬆的处理多行数据的机制,没有游标,Oracle 开发人员必须单独地、显示地取回并管理游标查询选择的每一条记录 。游标的另一项功能事,它包含一个跟蹤当前访问的记录的指针,这使您的程式能够一次处理多条记录 。使用游标的基本方法声明游标声明游标的语法如下:DECLARE cursor_nameIsSELECT statement其中,cursor_name 是您给游标指定的名称; SELECT statement 是给游标活动集返回记录的查询 。声明游标完成了下面两个目的:给游标命名;将一个查询与游标关联起来 。值得注意的是,必须在 PL/SQL 块的声明部分声明游标;给游标指定的名称是一个未声明的标识符,而不是一个 PL/SQL 变数,不能给游标名称赋值,也不能将它用在表达式中 。PL/SQL 块使用这个名称来引用游标查询 。例: DECLARECURSOR c1IsSELECT VIEW_NAME FROM ALL_VIEWSWHERE ROWNUM<=10 ;另外还可以在游标定义语句中声明游标的参数,例:CURSOR c1 ( view _nbr number )IsSELECT VIEW_NAME FROM ALL_VIEWSWHERE ROWNUM<= view _nbr ;游标参数只对相应的游标是可见的,不能在游标範围之外引用该游标的参数 。如果试图这样做,Oracle 将返回一个错误,指出该变数没有定义 。打开游标打开游标的语法如下:OPEN cursor_name ;其中 cursor_name 是您以前定义的游标名称 。打开游标将激活查询并识别活动集,可是在执行游标取回命令之前,并没有真正取回记录 。OPEN 命令还初始化了游标指针,使其指向活动集的第一条记录 。游标被打开后,直到关闭之前,取回到活动集的所有数据都是静态的,换句话说,游标忽略所有在游标打开之后,对数据执行的 SQL DML 命令( INSERT 、 UPDATE 、 DELETE 和 SELECT ) 。因此只有在需要时才打开它,要刷新活动集,只需关闭并重新打开游标即可 。从游标中取回数据FETCH 命令以每次一条记录的方式取回活动集中的记录 。通常将 FETCH 命令和某种叠代处理结合起来使用,在叠代处理中,FETCH 命令每执行一次,游标前进到活动集的下一条记录 。FETCH 命令的语法:FETCH cursor_name INTO record_list ;其中,cursor_name 是前面定义的游标的名称; record_list 是变数列表,它接受活动集中的列 。FETCH 命令将活动集的结果放置到这些变数中 。执行 FETCH 命令后,活动集中的结果被取回到 PL/SQL 变数中,以便在 PL/SQL 块中使用 。每取回一条记录,游标的指针就移向活动集的下一条记录 。例:FETCH C1 INTO VNAME;WHILE C1%FOUND LOOPDBMS_OUTPUT.PUT_LINE(TO_CHAR(C1%ROWCOUNT)||' '||VNAME);END LOOP;关闭游标CLOSE 语句关闭以前打开的游标,使得活动集不确定 。当用户的程式或会话结束时,Oracle 隐式关闭游标 。游标被关闭后,就不能对它执行任何操作了 , 否则将引发异常 。CLOSE 语句的语法是:CLOSE cursor_name ;其中,cursor_name 是以前打开的游标的名称 。完整的程式代码如下:DECLARECURSOR C1 IS SELECT VIEW_NAME FROM ALL_VIEWSWHERE ROWNUM<=10ORDER BY VIEW_NAME;VNAME VARCHAR2(40);BEGINOPEN C1;FETCH C1 INTO VNAME;WHILE C1%FOUND LOOPDBMS_OUTPUT.PUT_LINE(TO_CHAR(C1%ROWCOUNT)||''||VNAME);END LOOP; END;…… CLOSE C1;