美文网首页
第九十章 SQL命令 WHERE CURRENT OF

第九十章 SQL命令 WHERE CURRENT OF

作者: Cache技术分享 | 来源:发表于2021-11-29 09:02 被阅读0次

    第九十章 SQL命令 WHERE CURRENT OF

    使用游标指定当前行的UPDATE/DELETE子句。

    大纲

    WHERE CURRENT OF cursor
    

    参数

    • cursor - 指定在光标的当前位置执行操作,光标是指向表的光标。

    描述

    WHERE CURRENT OF子句可用于基于游标的嵌入式SQL UPDATEDELETE语句,以指定位于要更新或删除记录上的游标。
    例如:

       &sql(DELETE FROM Sample.Employees WHERE CURRENT OF EmployeeCursor)
    

    删除最后一个FETCH命令从“EmployeeCursor”游标获得的行。

    嵌入式SQL UPDATEDELETE可以使用WHERE子句(不带游标)或WHERE CURRENT OF(带声明游标),但不能同时使用两者。
    如果指定的UPDATEDELETE既不带WHERE也不带WHERE CURRENT OF,则会更新或删除表中的所有记录。

    更新的限制

    当使用WHERE CURRENT OF子句时,不能使用当前字段值更新字段以生成更新的值。
    例如,SET Salary=Salary+100SET Name=UPPER(Name)
    尝试这样做会导致SQLCODE -69错误:SET <field> = <value expression> not allowed with WHERE CURRENT OF <cursor>

    示例

    下面的嵌入式SQL示例显示了使用WHERE CURRENT OFUPDATE操作:

    ClassMethod WhereCurrentOf()
    {
        n %ROWCOUNT,%ROWID
        &sql(
            DECLARE WPCursor CURSOR FOR 
                SELECT Lang FROM SQLUser.WordPairs
                WHERE Lang='Sp'
        )
        &sql(OPEN WPCursor)
        q:(SQLCODE '= 0)
        for { 
            &sql(FETCH WPCursor)
            q:SQLCODE 
            &sql(
                UPDATE SQLUser.WordPairs SET Lang='Es'
                WHERE CURRENT OF WPCursor
            )
            if SQLCODE = 0 {
                w !,"Update succeeded"
                w !,"Row count=",%ROWCOUNT," RowID=",%ROWID 
            } else {
                w !,"Update failed, SQLCODE=",SQLCODE 
            }
        }
        &sql(CLOSE WPCursor)
    }
    

    下面的嵌入式SQL示例显示了使用WHERE CURRENT OFDELETE操作:

    ClassMethod WhereCurrentOf1()
    {
        n %ROWCOUNT,%ROWID
        &sql(
            DECLARE WPCursor CURSOR FOR 
            SELECT Lang FROM SQLUser.WordPairs
            WHERE Lang='En'
        )
        &sql(OPEN WPCursor)
        q:(SQLCODE'=0)
        for { 
            &sql(FETCH WPCursor)
            q:SQLCODE 
            &sql(
                DELETE FROM SQLUser.WordPairs
                WHERE CURRENT OF WPCursor
            )
            if SQLCODE=0 {
                w !,"Delete succeeded"
                w !,"Row count=",%ROWCOUNT," RowID=",%ROWID 
            } else {
                w !,"Delete failed, SQLCODE=",SQLCODE 
            }
        }
        &sql(CLOSE WPCursor)
    }
    

    相关文章

      网友评论

          本文标题:第九十章 SQL命令 WHERE CURRENT OF

          本文链接:https://www.haomeiwen.com/subject/ewvkxrtx.html