游标

来源:互联网 发布:外贸英语书籍推荐 知乎 编辑:程序博客网 时间:2024/05/14 12:03

        游标是数据库内存里的一个位置,保存着最后一条sql语句。如果当前sql语句是个数据库查询,那么来自于查询的一行记录也保存在内存里,这一行记录是游标的当前值或当前行。内存里的这个区域是有特定名称的,可以在程序中访问。

SQLSERVER

--声明游标

--SQL语句填充游标

--打开游标

--FETCH检索提取的信息

--对游标进行修改(更新或删除)
--关闭游标

--删除游标

<span style="font-size:14px;">DECLARE @iNo INT DECLARE @sPatronID VARCHAR(20)DECLARE @sName VARCHAR(30)--声明游标DECLARE cMyCURSOR CURSOR for--SQL语句填充游标SELECT PartronID,Name FROM parton--打开游标open cMyCURSOR--FETCH检索提取的信息select @iNo = 0fetch next from cMyCURSOR into @sPatronID, @sNamewhile @@fetch_status =0beginselect @iNo = @iNo +1print cast(@iNo as char(10))  + @sPatronID +@sNamefetch next from cMyCURSOR into  @sPatronID, @sNameend--对游标进行修改(更新或删除)--关闭游标close cMyCURSOR--删除游标deallocate cMyCURSOR</span>



MySQL  :

CREATE PROCEDURE `test`.`new_procedure` ()BEGIN-- 需要定义接收游标数据的变量   DECLARE a CHAR(16);  -- 游标  DECLARE cur CURSOR FOR SELECT i FROM test.t;  -- 遍历数据结束标志  DECLARE done INT DEFAULT FALSE;  -- 将结束标志绑定到游标  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;  -- 打开游标  OPEN cur;    -- 开始循环  read_loop: LOOP    -- 提取游标里的数据,这里只有一个,多个的话也一样;    FETCH cur INTO a;    -- 声明结束的时候    IF done THEN      LEAVE read_loop;    END IF;    -- 这里做你想做的循环的事件    INSERT INTO test.t VALUES (a);  END LOOP;  -- 关闭游标  CLOSE cur;END

这里有一个比较坑的地方,注意,变量的定义不要和你的select的列的键同名!不然,fetch into 会失败!

另外 :

如果没有则插入数据,如果有则更新的方法:

insert into `test` values (a,b) ON DUPLICATE KEY UPDATE `a`=c;





0 0
原创粉丝点击