VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

CURSOR

功能描述

CURSOR命令定义一个游标,用于在一个大的查询里面检索少数几行数据。

为了处理SQL语句,存储过程进程分配一段内存区域来保存上下文联系。游标是指向上下文区域的句柄或指针。借助游标,存储过程可以控制上下文区域的变化。

注意事项

  • 游标命令只能在事务块里使用。
  • 通常游标和SELECT一样返回文本格式。因为数据在系统内部是用二进制格式存储的,系统必须对数据做一定转换以生成文本格式。一旦数据是以文本形式返回,客户端应用需要把它们转换成二进制进行操作。使用FETCH语句,游标可以返回文本或二进制格式。

  • 应该小心使用二进制游标。文本格式一般都比对应的二进制格式占用的存储空间大。二进制游标返回内部二进制形态的数据,可能更易于操作。如果想以文本方式显示数据,则以文本方式检索会为用户节约很多客户端的工作。

    比如,如果查询从某个整数列返回1,在缺省的游标里将获得一个字符串1,但在二进制游标里将得到一个4字节的包含该数值内部形式的数值(大端顺序(Big-Endian):将数据的低位字节存放在内存的高位地址,高位字节存放在低位地址)。

语法格式

CURSOR cursor_name
    [ BINARY ] [ INSENSITIVE ] [ [ NO ] SCROLL ]
    FOR query ;

参数说明

  • cursor_name

    将要创建的游标名。

    取值范围:遵循数据库对象命名规范。

  • BINARY

    指明游标以二进制而不是文本格式返回数据。

  • INSENSITIVE

    指定该选项,则表示定义一个游标,以创建为该游标所使用的数据临时副本。对游标的所有请求都从 tempdb 中的这一临时表中得到应答。

    因此,对基表所做的修改不会反映在对该游标进行的提取所返回的数据中,并且该游标不允许进行修改。

  • [NO] SCROLL

    声明游标检索数据行的方式。

    • NO SCROLL:声明该游标不能用于以倒序的方式检索数据行。

    • 未声明:根据执行计划的不同,自动判断该游标是否可以用于以倒序的方式检索数据行。

    • 在cmdsql中,只支持添加 NO SCROLL关键字或者不添加滚动选项,不支持添加SCROLL关键字。

    • 在存储过程中,支持添加NO SCROLL、SCROLL关键字或者不添加滚动选项。

    • 显示游标中,只有申明为NO SCROLL的游标可以并行执行,建议将不需要用到倒序检索数据行方式的游标设置为NO SCROLL。

  • query

    使用SELECT或VALUES子句指定游标返回的行。

    取值范围:SELECT或VALUES子句。

示例

请参考FETCH的示例

相关链接

FETCH