• 相关软件
    >CURSOR_STATUS 创建者:webmaster 更新时间:2006-02-16 15:51

    这是一个标量函数,该函数允许存储过程的调用方确定针对一个给定参数,该过程是否返回游标和结果集。



    语法


    CURSOR_STATUS

        (

            { 'local' , 'cursor_name' }

            | { 'global' , 'cursor_name' }

            | { 'variable' , 'cursor_variable' }

        )



    参数


    'local'



    指定一个常量,该常量表明游标的源是一个本地游标名。



    'cursor_name'



    游标名。游标名必须符合标识符的规则。



    'global'



    指定一个常量,该常量表明游标的源是一个全局游标名。



    'variable'



    指定一个常量,该常量表明游标的源是一个本地变量。



    'cursor_variable'



    游标变量的名称。必须使用 cursor 数据类型定义游标变量。



    返回类型


    smallint








































    返回值

    游标名


    游标变量
    1游标的结果集至少有一行,并且:

    对于不感知游标和键集游标,结果集至少有一行。



    对于动态游标,结果集可以有零行、一行或多行。


    分配给该变量的游标已经打开,并且:

    对于不感知游标和键集游标,结果集至少有一行。



    对于动态游标,结果集可以有零行、一行或多行。


    0游标的结果集为空。*分配给该变量的游标已经打开,然而结果集肯定为空。*
    -1游标被关闭。分配给该变量的游标被关闭。
    -2不可用。可以是:

    先前调用的过程并没有将游标指派给 OUTPUT 变量。



    先前调用的过程给 OUTPUT 变量指派了游标,然而在过程结束时,游标处于关闭状态。因此,游标被释放,并且没有返回给调用过程。



    没有将游标指派给已声明的游标变量。


    -3带有指定名称的游标不存在。带有指定名称的游标变量并不存在,或者即使存在这样一个游标变量,但并没有给它分配游标。



    * 动态游标从不返回这个结果。



    示例


    下面的示例创建一个名为 lake_list 的过程,并将执行 lake_list 的输出结果用作 CURSOR_STATUS 的检验。



    说明  本示例依赖于一个名为 check_authority 的过程,该过程尚未创建。



    USE pubs
    IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'lake_list' AND type = 'P')
      DROP PROCEDURE lake_list
    GO
    CREATE PROCEDURE lake_list
      ( @region varchar(30),
      @size integer,
      @lake_list_cursor CURSOR VARYING OUTPUT )
    AS
    BEGIN
      DECLARE @ok SMALLINT
      EXECUTE check_authority @region, username, @ok OUTPUT
      IF @ok = 1
        BEGIN
        SET @lake_list_cursor =CURSOR LOCAL SCROLL FOR
          SELECT name, lat, long, size, boat_launch, cost
          FROM lake_inventory
          WHERE locale = @region AND area >= @size
          ORDER BY name
        OPEN @lake_list_cursor
        END
    END
    DECLARE @my_lakes_cursor CURSOR
    DECLARE @my_region char(30)
    SET @my_region = 'Northern Ontario'
    EXECUTE lake_list @my_region, 500, @my_lakes_cursor OUTPUT
    IF Cursor_Status('variable', '@my_lakes_cursor') <= 0
      BEGIN
      /* Some code to tell the user that there is no list of
      lakes for him/her */
      END
    ELSE
      BEGIN
        FETCH @my_lakes_cursor INTO -- Destination here
        -- Continue with other code here.
    END
    相关文章
    本页查看次数: