游标的详细用法

如题所述

declare @id int\x0d\x0adeclare @name varchar(50)\x0d\x0adeclare cursor1 cursor for --定义游标cursor1\x0d\x0aselect * from table1 --使用游标的对象(跟据需要填入select文)\x0d\x0aopen cursor1 --打开游标\x0d\x0afetch next from cursor1 into @id,@name --将游标向下移1行,获取的数据放入之前定义的变量@id,@name中\x0d\x0awhile @@fetch_status=0 --判断是否成功获取数据\x0d\x0abegin\x0d\x0aupdate table1 set name=name+'1'\x0d\x0awhere id=@id --进行相应处理(跟据需要填入SQL文)\x0d\x0afetch next from cursor1 into @id,@name --将游标向下移1行\x0d\x0aend\x0d\x0aclose cursor1 --关闭游标\x0d\x0adeallocate cursor1
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-09-14
游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。
create proc cursorTest
@_id int=0,
@_name varchar(50)=''
as--创建游标
declare @cursor cursor--设定游标欲操作的数据集
set @cursor=cursor for
select _id,_name from users
open @cursor--打开游标
fetch next from @cursor into @_id,@_name--移动游标指向到第一条数据,提取第一条数据存放在变量中
while(@@fetch_status=0)begin--如果上一次操作成功则继续循环
print @_name--操作提出的数据
fetch next from @cursor into @_id,@_name--继续提下一行
end
close @cursor--关闭游标
deallocate @cursor--删除游标
第2个回答  推荐于2018-08-26
declare @id int
declare @name varchar(50)
declare cursor1 cursor for --定义游标cursor1
select * from table1 --使用游标的对象(跟据需要填入select文)
open cursor1 --打开游标
fetch next from cursor1 into @id,@name --将游标向下移1行,获取的数据放入之前定义的变量@id,@name中
while @@fetch_status=0 --判断是否成功获取数据
begin
update table1 set name=name+'1'
where id=@id --进行相应处理(跟据需要填入SQL文)
fetch next from cursor1 into @id,@name --将游标向下移1行
end
close cursor1 --关闭游标
deallocate cursor1本回答被网友采纳
第3个回答  2012-07-21
这是游标的知识点,如果已经看过可跳过,直接看下面的例子:
游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是
与一条T_SQL
选择语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理
时,必须声明一个指向该结果集的游标。 使用游标有四种基本的步骤:声明游标、打开游标、提取数据、关闭游标。 1.声明游标 同其它变量一样,我们也可以定义游标的访问类型:全局、共享、实例或局部,游标变量的命名规范建议也同其它变量一样。 declare my_cursor cursor keyset for select * from info
DECLARE CustomerCursor CURSOR FOR
SELECT acct_no,name,balance FROM customer WHERE province="北京"; 2.打开游标
OPEN CustomerCursor; 3.提取数据
FETCH语句来取得数据。一条FETCH语句一次可以将一条记录放入程序员指定的变量中。已经声明并打开一个游标后,我们就可以将数据放入任意的变量中。在FETCH语句中您可以指定游标的名称和目标变量的名称。--声明局部变量
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
注:如果提示“提取类型··不能用于只进游标”则在声明游标时:DECLARE MyCursor CURSOR SCROLL FOR ·· (FAST_FORWARD :只进游标 ; SCROLL: 滚动游标 )示例:DECLARE MyCursor CURSOR SCROLL FOR SELECT * FROM Test1DECLARE @ROW1 int,@ROW2 char(10),@ROW3 char(10),@ROW4 char(10) OPEN MyCursor FETCH next FROM MyCursor INTO @ROW1, @ROW2, @ROW3, @ROW4WHILE (@@fetch_status =0)
BEGIN INSERT INTO Test1(id, a, b, c)
VALUES (@ROW1, @ROW2, @ROW3, @ROW4) FETCH next FROM MyCursor INTO @ROW1, @ROW2, @ROW3, @ROW4END
CLOSE MyCursor
DEALLOCATE MyCursor(示例是将Test1表中的数据复制一次!)(@@fetch_status 返回被 fetch 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。0 fetch 语句成功;-1 fetch语句失败或此行不在结果集中;-2 被提取的行不存在;所以使用@@fetch_status=0判断是否游标到了最后一行)高级应用:修改当前游标所在行的信息,我们可以如下操作:
UPDATE table1
SET balance=1000
WHERE CURRENT of yourCursor;
删除当前行的操作如下:
DELETE FROM table1
WHERE CURRENT OF yourCursor; 此时声明游标的时候:declare my_cursor cursor scroll dynamic for ···
scroll表示可随意移动游标指针(否则只能向前),dynamic表示可以读写游标(否则游标只读)

例子:
首先总结下:

游标按以下操作进行
parse 解析
bind 绑定
open 打开
execute 执行
fetch 回取
close 关闭
1.写自己第一个游标PL/SQL
declare
cursor c_s is select * from user_tables;
begin
open c_s; --打开游标
close c_s;--关闭游标
end;
游标的4个属性 %found,%notfound,%rowcount,%isopen
1.%found 游标有记录则返回true否则false
declare
cursor c_s is select * from user_tables;
cc c_s%rowtype;
begin
open c_s; --打开游标
fetch c_s into cc;
while c_s%found loop
fetch c_s into cc;
end loop;
close c_s;--关闭游标
end;

2.%notfound 游标没记录则返回true否则false(个人感觉有点多余)
declare
cursor c_s is select * from user_tables;
cc c_s%rowtype;//游标变量
begin
open c_s; --打开游标
fetch c_s into cc;
while c_s%found loop
exit when c_s%notfound;
fetch c_s into cc;
end loop;
close c_s;--关闭游标
end;
3.%rowcount 返回游标取回的记录数目
declare
cursor c_s is select * from user_tables;
cc c_s%rowtype;
begin
open c_s; --打开游标
fetch c_s into cc;
while c_s%found loop
dbms_output.put_line(c_s%rowcount);
fetch c_s into cc;
end loop;
close c_s;--关闭游标
end;
4.%isopen 如果游标打开就返回true 否则false
declare
cursor c_s is select * from user_tables;
begin
if c_s%isopen then
dbms_output.put_line('cursor is open');
else
open c_s; --打开游标
end if;
close c_s;--关闭游标
end;
游标参数
declare
cursor c_s(cs_id number) is select * from admin id=cs_id;
begin
open c_s(10); --打开带参数的游标
close c_s;--关闭游标
end;
游标中的for update
declare
cursor c_s is select id from admin
for update of id //查询时锁定 id列
begin
open c_s;
commit;//提交释放锁 或者可以用 rollback
close c_s;
end;
游标中的where cursor of
UPDATE table_name SET set_clause WHERE CURSOR OF cursor_name; //更新游标所指向的那条记录
DELETE FROM table_name WHERE CURSOR OF cursor_name; //删除游标所指向的那条记录
游标中的ref cursor类型
TYPE c_s IS REF CURSOR RETRUN table%rowtype; //这种形式为强类型 在声明的时候就定了为行类型
TYPE c_s IS REF CURSOR;//弱类型 不与记录的数据类型关联
例子:
declare
TYPE c_s IS REF CURSOR RETRUN table%rowtype;
TYPE c_s2 IS REF CURSOR;
var_cs c_s;//声明为游标变量的类型
begin
OPEN c_s FOR select * from admin;
CLOSE c_s;
end;

游标的详细用法
使用方法:1、声明游标:游标在使用之前必须先声明,可用DECLARE CURSOR语句声明游标。2、打开游标:使用OPEN语句的功能打开游标,实际上就是执行相应的SELECT查询语句,将查询结果放到缓冲区。这时游标处于活动状态,游标指针指向第一条记录。3、提取游标:FETCH语句是从游标中提取特定的一行。4、关闭游标:使...

SQL游标怎么用
具体用法如下:1、打开sql server management studio,选中要操作的数据库;2、新建一个查询;3、声明一个游标,以及一些需要用到的临时变量;4、使用游标,首先打开游标,并将游标下移一行;5、循环取出数据,并进行相应的逻辑处理,其中的变量保存在@id和@name中;6、每次循环的结束,要把游标下移;7...

游标卡尺准确用法?
1查看零刻度线检查光标是否与主标尺体的零刻度线对齐。对齐是可以测量的。如果没有对准,测量前应记录零误差。2右手拿住尺身右手握住尺身,拇指移动光标,左手握住待测外径的物体,使待测物体位于外测之间,当其紧贴测量爪时,即可读数。3游标尺零线从主尺的零刻度线向右看找到游标的零线,再向左看游...

游标卡尺准确用法?
步骤一:查看零刻度线在使用游标卡尺进行测量前,首先需要查看游标和主尺身的零刻度线是否对齐。如果对齐,就可以进行测量。如果不对齐,则需要记取零误差后再进行测量。步骤二:右手拿住尺身右手拿住尺身,大拇指移动游标,左手拿待测外径物体,使待测物位于外测量之间,当与量爪紧紧相贴,即可进行读数...

游标卡尺准确用法是什么?
在使用游标卡尺进行测量时,首先需要将软布擦干净,然后将量尺并拢,查看游标和主尺身的零刻度线是否对齐。如果对齐了,就可以开始进行测量。如果零刻度线没有对齐,需要记取零误差。游标的零刻度线在尺身零刻度线右侧的叫正零误差,在尺身零刻度线左侧的叫负零误差。在读数时,只需要注意主尺上刻的...

游标卡尺用法
游标卡尺用法如下:1、游标卡尺分为两部分,不可移动的为主尺,可以移动的为游标尺。2、测圆环的外径,将游标卡尺的外侧脚卡住圆环的最大位置处(这样才能保证测的是直径)。3、读数是关键,先读整数:看游标尺零线左边,主尺第一分度线的数值,即为整数值,21毫米。读小数:看游标尺零线右边第几...

游标卡尺的读法与用法
游标卡尺的读法与用法如下 测量物品外径,使用外测量爪卡住,松紧适当。测量物品内径,使用内测量爪撑住,松紧适当。测量物品深度,使用尾部的深度尺抵住,松紧适当。上述三步操作完后,可以使用固定器固定刻度。游标卡尺的读数为两部分之和,即读数=主尺读数+游标尺读数,主尺为上半部分不动的标尺,最小...

游标卡尺用法
1. 测量外径:将游标卡尺的红框内部分钳住物品,确保钳住位置正确,然后得出测量数据。2. 测量内径:将游标卡尺的红框内部分撑在物品的内径部分,两端张开,确保位置准确,然后得出测量数据。3. 测量深度:将游标卡尺的红框内部分的薯销探入物品内部,固定标尺,确保位置正确,然后得出测量数据。END 读数...

数据库里面静态游标包含哪两种类型?
1.隐式游标 1)Select …INTO…语句,DML语句,使用隐式Cursor。此外,还有一种使用FOR LOOP的Implicit Cursor用法。2)可以通过隐式Cusor的属性来了解操作的状态和结果。Cursor的属性包含:SQL%ROWCOUNT 整型代表DML语句成功执行的数据行数。SQL%FOUND 布尔型值为TRUE代表插入、删除、更新或单行查询操作成功...

游标卡尺用法
游标卡尺的使用指南游标卡尺是一种精密测量工具,用于测量物体的外径、内径和深度。以下是它的基本操作方法:测量外径:如图所示,握住卡尺钳住待测物品,读取红框内的数值,即为测量结果。测量内径:同样,将卡尺的红框部分插入物品内部,撑开两端,读取标尺与副尺重合的数值,加上副尺的精确度,即为内径...

相似回答