第九十章 SQL命令 WHERE CURRENT OF
2021-11-29 本文已影响0人
Cache技术分享
第九十章 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)
}