技术开发 频道

使用游标将多行查询结果逐行处理

    【IT168 技术文档】在SYBASE数据库中,说明性数据库语言(SQL)是目前首推的最成功,应用最广泛的数据库语言,它已成为关系型数据库语言的国际标准。这主要得益于它的两大优点:

    一是免除了用户描述操作过程的麻烦,而将其转嫁给系统,系统可根据用户所提出的要求,确定一个有效的操作过程,二是其语言本身接近英语的自然语言,易学易用,很受用户欢迎。

    尽管如此,SQL语言一般局限于对数据库的操作,本身不是计算完备的语言,如在变量类型上不像高级程序设计语言(如:C语言)有如数组、指针等一些复杂变量类型;另外该语言是面向集合的语言(set_oriented languase),即执行一条语句可以一次性地提供所需的所有元组,可是在实际编程时我们需要对这些元组逐个地赋值给相关变量,根据条件分别处理。

    目前解决此类问题办法是将SQL语言嵌入到高级程序设计语言中,利用高级程序设计语言处理数据能力强的优点,与SQL语言对数据库直接操作的特点相结合,共同完成,这在一定程度上,既增加编写程序的难度,又使整个程序繁琐。下面我向大家介绍在新版SYBASE数据库中,增加的工具游标,使用它可以方便地实现将多行查询结果进行逐行处理。

    一、首先介绍游标的功能、相应的操作命令、变量及工作流程

    游标(cursor)主要功能是用select查询语句,得到的多行数据结果,一次一行地送至需要调用的存储过程或宿主程序中,最初游标指向第一行数据,将这行数据送至存储过程或宿主程序中,然后游标又指向下一行数据,这样一直循环下去,直至所有的数据全部调用完毕,它可以方便灵活地修改或删除游标所在行的数据。

    游标的机制由以下五条语句及两个全局变量来完成。

    1、说明语句。对一个游标进行命名,并将它与相应的查询语句相联系。

    语法是:declare cursor_name cursor for select_statement

    其中:select_statement是一个SELECT语句,这个语句返回多行结果数据,它不允许有INTO子句和COMPUTE子句存在。

    2、打开游标语句。执行与游标相联系SQL查询语句,并将查询结果置于游标中。

    语法是:open cursor_name

    3、取数语句。用来从打开的游标中检索数据,并将这些数据赋给宿主变量。在每次执行取数语句时,首先将游标向前推进一位,然后按照游标当前位置取一值,并对相应变量赋值。

    语法是:fetch cursor_name into: host_ vavriable,……

    4、关闭游标语句。当取数完毕或者发生错误时,一定要关闭游标。否则下次调用游标将出错。

    语法是:close cursor_name

    5、 删除游标语句,该语句主要是将游标调用的内存资源释放。

    语法是:dellocate cursor_name

    全局变量:@@rowcount;使用取数语句返回行值数。

    @@sql status 取数返回状态变量,值有三个:

    0表示取数成功。
    1表示取数结果错误。 
    2表示没有可取的数。

0
相关文章