商务网站大全,佛山英文网建站,国内知名的网站建设企业,做网站的系统游标SQL语言是面向集合的#xff0c;是对指定列的操作。如果要对列中的指定行进行操作#xff0c;就必须使用游标。当在PL/SQL块中执行查询语句(SELECT) 和数据操纵语句(DML) 时#xff0c;Oracle会为其分配一个上下文区(Context Area)游标是指向上下文区的指针#xff0c;…游标SQL语言是面向集合的是对指定列的操作。如果要对列中的指定行进行操作就必须使用游标。当在PL/SQL块中执行查询语句(SELECT) 和数据操纵语句(DML) 时Oracle会为其分配一个上下文区(Context Area)游标是指向上下文区的指针它为应用提供了一种对具有多行数据查询结果集中的每一行数据分别进行单独处理的方法显式游标游标分为显式游标和隐含游标两种隐含游标用于处理SELECT INTO和DML语句显式游标则用于处理S ELECT语句返回的多行数据使用显式游标定义游标CURSOR cursor_ name IS select statement;打开游标OPEN cursor name;提取数据FETCH cursor_name INTO variable1,variable...;FETCH cursor_name bulk collect into collect1..;关闭游标CLOSE cursor name;代码--创建游标declarecursor 游标名称 is select * from表名;变量名 表名%rowtype;beginopen 游标名;--打开游标loopfetch 游标名 into 变量名;--提取游标exit when 游标名%notfound;dbms_output.put_line(变量名.列名);endloop;close 游标名;--关闭游标end;显示游标属性显式游标属性用于返回显式游标的执行信息游标属性使用格式为: 游标名 属性名%ISOPEN用于确定游标是否已经打开。如果游标已经打开则返回值为TRUE; 否则返回FALSE%FOUND检查是否从结果集中提取到数据。如果提取到数据则返回值为TRUE; 否则返回FALSE%NOTFOUND与%FOUND属性恰好相反如果提取到数据则返回值为FALSE; 否则返回TRUE%ROWCOUNT返回到当前行为止已经提取到的实际行数参数游标参数游标是指带有参数的游标。在定义了参数游标之后使用不同参数值多次打开游标可以生成不同的结果集。代码--参数游标declarecursor cursor_wxn(x_empno number)--定义参数(形参)isselect * from emp where empnox_empno;v_name emp%rowtype;beginopen cursor_wxn(7369);--(实参)loopfetch cursor_wxn intov_name;exit when cursor_wxn%notfound;dbms_output.put_line(v_name.ename);endloop;closecursor_wxn;end;游标for循环游标for循环是在pl/sql块中使用游标的最简单方式它可以简化对游标的处理。当使用游标for循环时oracle会隐含的打开游标提取游标数据并关闭游标。代码--游标for循环declarev_name emp%rowtype;cursorcursor_wxnisselect * fromemp;beginfor v_name incursor_wxn loopdbms_output.put_line(v_name.ename);endloop;end;上面代码中无须进行取值和关闭的操作游标for循环可以自己进行。下面还有一个更为简单的游标for循环参考上面的代码进行读阅--简单forbeginfor v_name in (select * fromemp) loopdbms_output.put_line(v_name.ename);endloop;end;使用游标变量代码实例declaretype youbiao_bianliangis ref cursor;--变量类型cursor_varisble youbiao_bianliang;--定义游标类型的变量v_name emp%rowtype;--变量beginopencursor_varisblefor select * from emp where empno7788;loopfetch cursor_varisble intov_name;exit when cursor_varisble%notfound;dbms_output.put_line(v_name.ename);endloop;closecursor_varisble;end;隐含游标作用用属性进行一些判断(一种判断方式)含义当执行一条DML语句或者SELECT...INTO语句时都会创建一个隐含游标。隐含游标的名称是SQL不能对SQL游标显示执行OPEN、FETCH和CLOSE语句。Oracle隐式地打开、提取并总是自动地关闭SQL游标。属性SQL%FOUND:只有DML语句影响一行或多行时SQL%FOUND属性才返回true。SQL%NOTDOUND如果DNL语句没有影响行数此属性将返回false。SQL%ROWCOUNT返回DML影响的行数如果DML语句没有影响行则返回0.SQL%ISOPEN此属性用于判断SQL游标是否已经打开。在执行SQL语句之后Oracle自动关闭SQL游标所以隐含游标的SQL%ISOPEN属性始终为false。简单示例1--隐含游标begindelete from emp where empno1;if sql%notfound thendbms_output.put_line(找不到记录);elsedbms_output.put_line(记录);end if;end;示例2:declareanumber:1;begindelete from emp where empnoa;if sql%notfound thendbms_output.put_line(没有改变);elsedbms_output.put_line(改变);end if;end;