IF Is_prov="北京"THEN DECLARE CustomerCursor CURSOR FOR SELECT acct_no,name,balance FROM customer WHERE province="北京"; ELSE DECLARE CustomerCursor CURSOR FOR SELECT acct_no,name,balance FROM customer WHERE province〈〉"北京"; END IF
lb_continue=True ll_total=0 DO WHILE lb_continue FETCH CustomerCur-sor INTO:ls_acct_no, :ls_name, :ll_balance; If sqlca.sqlcode=0 Then #如果SQLCA.SQL-CODE==0,则一切正常 ll_total+=ll_balance Else #跳出循环 lb_continue=False End If LOOP
--声明游标 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
实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
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