第九十章 SQL命令 WHERE CURRENT OF
第九十章 SQL命令 WHERE CURRENT OF
使用游标指定当前行的UPDATE/DELETE子句。
大纲
WHERE CURRENT OF cursor
参数
cursor- 指定在光标的当前位置执行操作,光标是指向表的光标。
描述
WHERE CURRENT OF子句可用于基于游标的嵌入式SQL UPDATE或DELETE语句,以指定位于要更新或删除记录上的游标。
例如:
&sql(DELETE FROM Sample.Employees WHERE CURRENT OF EmployeeCursor)
删除最后一个FETCH命令从“EmployeeCursor”游标获得的行。
嵌入式SQL UPDATE或DELETE可以使用WHERE子句(不带游标)或WHERE CURRENT OF(带声明游标),但不能同时使用两者。
如果指定的UPDATE或DELETE既不带WHERE也不带WHERE CURRENT OF,则会更新或删除表中的所有记录。
更新的限制
当使用WHERE CURRENT OF子句时,不能使用当前字段值更新字段以生成更新的值。
例如,SET Salary=Salary+100或SET Name=UPPER(Name)。
尝试这样做会导致SQLCODE -69错误:SET <field> = <value expression> not allowed with WHERE CURRENT OF <cursor>。
示例
下面的嵌入式SQL示例显示了使用WHERE CURRENT OF的UPDATE操作:
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 OF的DELETE操作:
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)
}