此语句用于修改游标当前位置处的数据。
UPDATE WHERE CURRENT OF cursor-name { USING DESCRIPTOR sqlda-name | FROM hostvar-list }
UPDATE update-table, ... SET set-item, ... WHERE CURRENT OF cursor-name
hostvar-list : indicator variables allowed
update-table :
[owner-name.]object-name [ [ AS ] correlation-name ]
set-item : [ correlation-name.]column-name = { expression | DEFAULT } | [owner-name.]object-name.column-name = { expression | DEFAULT }
object-name : identifier (a table or view name)
sqlda-name : identifier
USING DESCRIPTOR 子句 为变量赋值时,变量必须已经声明,而且变量名必须以 "at" 符号 (@) 开头。变量和列赋值可以混合在一起,并且可以使用任意数字。如果 SET 列表中赋值号左边的名称不仅与变量名匹配,还与更新表中的某列匹配,此语句将更新该列。
SET 子句 set-item 中引用的列必须位于更新的表或视图中。它们不能引用别名或其它表或视图中的列。如果要更新的表或视图在游标说明中被赋予了一个相关名,那么在 SET 子句中必须使用此相关名。
每个 set-item 都与一个 update-table 关联,并会对游标查询中匹配表的相应列进行修改。expression 将引用 UPDATE 列表中标识的表的列,还可能使用常量、变量、查询选择列表中的表达式或以上各元素的组合(例如,使用 +、-、...、COALESCE、IF 等运算符)。expression 不能引用游标的查询中表达式的别名,也不能引用未在 UPDATE 列表中出现的游标的查询中其它表的列。子选择、子查询谓语和集合函数无法在 set-items 中使用。
每个 update-table 都按照以下方式与游标查询中的表进行匹配:
如果指定了相关名,则它将与游标的查询中具有相同 table-or-view-name 和相同 correlation-name 的表相匹配。
否则,如果游标的查询中表具有相同 table-or-view-name 而没有指定的相关名,或具有与 table-or-view-name 相同的相关名时,则更新表将与游标的查询中的此表相匹配。
否则,如果游标的查询中的单个表具有与更新表相同的 table-or-view-name,则更新表将与游标的查询中的此表相匹配。
如果某列定义了缺省值,则可以使用 SET 子句将该列设置为其缺省值。有关这一用法的示例,请参见UPDATE 语句的示例部分。
这种形式的 UPDATE 语句更新指定游标的当前行。当前行被定义为从游标中成功读取的最后一行,对游标的最后一项操作不能是定位的 DELETE 语句。
对于语法 1,SQLDA 中的列或主机变量列表中的值与指定游标返回的列一一对应。如果 SQLDA 中的 sqldata 指针为空指针,则不更新相应的选择列表项。
在语法 2 中,在指定查询的当前行中,请求的列被设置为该行的指定值。这些列不必位于指定的打开游标的选择列表中。这种格式是可以准备的。
同样,为变量赋值时,变量必须已经声明,而且变量名必须以 "at" 符号 (@) 开头。变量和列赋值可以混合在一起,并且可以使用任意数字。如果 SET 列表中赋值号左边的名称不仅与变量名匹配,还与更新表中的某列匹配,此语句将更新该列。
USING DESCRIPTOR、FROM hostvar-list 和 hostvar 格式仅用于嵌入式 SQL。
必须有所修改的列的 UPDATE 权限。
无。
SQL/2003 核心特性。如果 ansi_update_constraints 选项设置为 Off,则可更新的游标的范围可能包含服务商扩充。
Sybase Open Client/Open Server 支持使用嵌入式 SQL,SQL Anywhere 支持使用过程和触发器。
以下是 UPDATE 语句 WHERE CURRENT OF 游标的示例:
UPDATE Employees SET Surname = 'Jones' WHERE CURRENT OF emp_cursor; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |