关闭游标
在游标操作的最后请不要忘记关闭游标,这是一个好的编程习惯,以使系统释放游标占用的资源。关闭游标的语句很简单:
CLOSE CustomerCursor; |
使用Where子句
我们可以动态地定义游标中的Where子句的参数,例如在本例中我们是直接定义了查询省份是北京的记录,但也许在应用中我们要使用一个下拉式列表框,由用户来选择要查询的省份,我们该怎样做呢?
我们在前面曾经提到过,DECLARE语句的作用只是定义一个游标,在OPEN语句中这个游标才会真正地被执行。了解了这些,我们就可以很方便地实现这样的功能,在DECLARE的Where子句中加入变量作参数,如下所示:
DECLARE CustomerCursor CURSOR FOR SELCECT acct_no,name,balance FROM customer WHERE province=:ls_province; ∥定义ls_province的值 OPEN CustomerCursor; |
游标的类型
同其它变量一样,我们也可以定义游标的访问类型:全局、共享、实例或局部,游标变量的命名规范建议也同其它变量一样。
–声明游标 declare my_cursor cursor keyset for select * from info –删除游标资源 deallocate my_cursor –打开游标,在游标关闭或删除前都有效 open my_cursor –关闭游标 close my_cursor –声明局部变量 declare @id int,@name varchar(20),@address varchar(20) –定位到指定位置的记录 fetch absolute 56488 from my_cursor into @id,@name,@address select @id as id,@name as name,@address as address –定位到当前记录相对位置记录 fetch relative -88 from my_cursor into @id,@name,@address select @id as id,@name as name,@address as address –定位到当前记录前一条 fetch prior from my_cursor into @id,@name,@address select @id as id,@name as name,@address as address –定位到当前记录后一条 fetch next from my_cursor into @id,@name,@address select @id as id,@name as name,@address as address –定位到首记录 fetch first from my_cursor into @id,@name,@address select @id as id,@name as name,@address as address –定位到尾记录 fetch last from my_cursor into @id,@name,@address select @id as id,@name as name,@address as address 实例: use database1 declare my_cursor cursor scroll dynamic /**//*scroll表示可随意移动游标指 针(否则只能向前),dynamic表示可以读写游标(否则游标只读)*/ for select productname from product open my_cursor declare @pname sysname fetch next from my_cursor into @pname while(@@fetch_status=0) begin print ‘Product Name: ‘ + @pname fetch next from my_cursor into @pname end fetch first from my_cursor into @pname print @pname /**//*update product set productname=’zzg’ where current of my_cursor */ /**//*delete from product where current of my_cursor */ close my_cursor deallocate my_cursor |
4.游标的高级技巧
尽管目前基于SQL语句的后台数据库所支持的语言都大致相当,但对游标的支持却有着一些差异,例如对滚动游标支持。所谓滚动游标,就是程序员可以指定游标向前后任意一个方向滚动。如在Informix中,您甚至还可以将游标滚向结果集开头或末尾,使用的语句分别是FETCH FIRST,FETCH LAST、FETCH PRIOR和FETCH NEXT。当程序员用FETCH语句,其缺省是指FETCH NEXT。由于滚动是在数据库后台实现的,所以滚动游标为用户编程提供了极大的方便。
对游标支持的另一个不同是可修改游标。上述游标的使用都是指只读游标,而象Oracle、Sybase等数据库却另外支持可作修改的游标。使用这样的数据库,您可以修改或删除当前游标所在的行。例如修改当前游标所在行的用户的余额,我们可以如下操作:
UPDATE customer SET balance=1000 WHERE CURRENT of customerCursor; 删除当前行的操作如下: DELETE FROM Customer WHERE CURRENT OF CustomerCursor; |
但是如果您当前使用的数据库是Sybase,您需要修改数据库的参数,将游标可修改的值定为1,才能执行上述操作。这一赋值在连接数据库的前后进行均可。
SQLCA.DBParm=”Cursor Update=1″ |
另外一个内容是动态游标,也就是说您可以运行过程中动态地形成游标的SELECT语句。这同在PowerBuilder中动态地使用嵌入式SQL一样,需要用到DynamicStagin-gArea等数据类型,这已超出了本节的范围。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
如何使用SQL Server游标(一)
在数据库开发过程中,我们常常会遇到这样情况,即从某一结果集中逐一地读取一条记录。那么如何解决这种问题呢?
-
如何使用SQL Server游标(二)
如何使用游标?使用游标有四种基本的步骤:声明游标、打开游标、提取数据、关闭游标。