• 游标的概念及运用笔记


    1、使用英文单词cursor来表示游标,全局游标用global表示,局部游标用local表示。
    2、局部游标
    ①一旦创建就可以在任何位置访问该游标。
    ②当不同过程不同函数需要访问和管理同一个结果集合的时候,需要创建全局游标。
    3、局部游标
    ①全局游标只能在声明和创建的函数或存储过程中对它进行访问。
    ②局部游标管理起来更容易,其安全性相对较高。
    4、SQL使用游标的步骤如下:
    ①声明游标
    游标就是指向内存中结果集的指针,可以实现对内存中的结果集进行各种操作,操作完毕后才能将数据存放到硬盘上。
    声明游标

    declare cursor_name cursor 
    [local|global]
    [forward_only|scroll]
    [static|dynamic]
    [read_only]
    for
    select_statement
    [;]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    cursor_name:定义服务器的游标名称
    local:局部游标
    global:全局游标
    forward_only:指定游标只能从第一行滑动到最后一行
    statiac:定义的是静态游标,一般默认的定义就是静态游标
    dynamic:定义的是动态游标,动态游标不能使用绝对访问功能
    read_only:禁止通过该游标进行更新
    select_statement:定义游标结果集的标准select语句
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    例题:使用static关键字声明全局游标cEmploy,该游标与表student中的所有的男人记录相关联。

    declare cEmploy cursor static
    for
    select studentno,sname
    from student
    where sex = '男'
    order by studentno
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ②打开游标
    声明游标后必须使用open语句打开游标才可以对其进行访问。
    设计可以使用全局函数@@cursor_rows来指定或获取与游标关联的数据记录行数。使用open语句打开上例中的游标cEmploy的代码如下:

    open cEmploy
    
    • 1

    ③获取记录信息
    使用fetch函数可以在一个打开的游标中遍历记录集中的记录。使用fetch函数获取游标中的一条记录,并将它保存到相应的变量中后,游标将会自动被定位到下一条记录上。
    fetch函数格式如下:

    fetch [next|prior|last|
    absolute{n|@nvar|
    relative{n|@nvar}]
    from]
    cursor_name[into @variable_name[,...n]]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    例:使用fetch命令访问游标中的每条记录,列出cEmploy游标中的所有记录。

    declare @Studentno as nchar(10)
    declare @Sname as nchar(8)
    fetch from cEmploy
    	into @Studentno,@Sname
    set @RecCount = @RecCount -1
    print '学号:'+convert(nchar(10),@Studentno)+'学生姓名:'+@Sname
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ④关闭游标
    关闭游标意味着解锁该游标所占的所有的记录集资源。
    关闭打开的cEmploy游标,可以使用下列命令:

    close cEmploy
    
    • 1

    ⑤释放游标
    关闭游标后需要进一步释放游标本身所占有的资源,此时,可以用deallocate语句完成该项操作。

    deallocate cEmploy
    
    • 1
  • 相关阅读:
    《动手学深度学习 Pytorch版》 7.6 残差网络(ResNet)
    什么是浮动
    【Vue3】定义全局变量和全局函数
    20道前端高频面试题(附答案)
    windows10系统64位安装delphiXE11.2完整教程
    Java多线程——CyclicBarrier 与 CountDownLatch 区别,如何线程间数据交换?
    【机器学习】采用 EM 算法求解的模型有哪些,为什么不用牛顿法或梯度下降法?(面试回答)
    条例1~5
    无涯教程-JavaScript - INFO函数
    java毕业设计白天鹅造型网mybatis+源码+调试部署+系统+数据库+lw
  • 原文地址:https://blog.csdn.net/weixin_55804957/article/details/127694739