虽然很多人都说游标的性能不好,但感觉在某些地方,你不得不用游标(可能是我水平低的问题,有些牛人是可以通过各种技巧来避免使用游标)。当然我也只是初学而已,通过网络的搜索,总结了一下游标的基本使用方法。另求助各牛人,希望能说一下游标的性能究竟有多烂,还有如何避免使用游标。
1 定义游标
语法是:declare cursor_name cursor for select_statement [for{read only|update[of colum_name_list]}]
其中select_statement是一个SELECT语句,这个语句返回多行结果数据,它不允许有INTO子句和COMPUTE子句存在。通过使用for update或for read only关键词将游标显式定义成可更新的或只读的。游标一定要与一个结果集联系在一起。
2 打开游标
语法是:open cursor_name
在声明游标后,必须打开它以便用fetch,update,delete读取、修改、删除行。在打开一个游标后,它将被放在游标结果集的首行前,必须用fetch语句访问该首行。
3 取数据
语法是:fetch cursor_name into: host_ vavriable,……
从打开的游标中检索数据,并将这些数据赋给宿主变量。在每次执行取数语句时,首先将游标向前推进一位,然后按照游标当前位置取一值,并对相应变量赋值。一条FETCH语句一次可以将一条记录放入指定的变量中。赋给变量时,是按照记录的列从左到右赋给变量的。
其中在每次读取数据后,都会返回一个状态值,可用@@sqlstatus访问该值:
0 Fetch语句成功
1 Fetch语句导致错误
2 结果集没有更多的数据,当前位置位于结果集最后一行,而客户对该游标仍发出Fetch语句时。
4 关闭游标
语法是:close cursor_name
当取数完毕或者发生错误时,一定要关闭游标。否则下次调用游标将出错。
5 删除游标
语法是:deallocater cursor_name
该语句主要是将游标调用的内存资源释放。
6 游标其他应用
若游标是可更新的,可用update和delete语句来更新和删除行。
1. 删除游标当前行
语法:Delete from 表名 where current of 游标名
当游标删除一行后,游标将置于被删除行的前一行上。
2. 更新游标当前行
语法:update 表名 set column_name1={expression1|NULL|(select_statement)} [,column_name2={expression2|NULL|(select_statement)} [……] where current of 游标名
举例: update publishers set city=” Pasadena ”,state=”CA” where current of pubs_crsr