Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 语句 » SQL 语句 (P-Z)

 

UPDATE(定位)语句 [ESQL] [SP]

此语句用于修改游标当前位置处的数据。

语法 1
UPDATE WHERE CURRENT OF cursor-name
{ USING DESCRIPTOR sqlda-name | FROM hostvar-list }
语法 2
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-listhostvar 格式仅用于嵌入式 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;