当您打算更新由准备好的 SELECT 语句返回的值,当存取这些值时,请在 ESQL/C 应用中和在 DB-Access 中使用 FOR UPDATE 子句。
元素 | 描述 | 限制 | 语法 |
---|---|---|---|
column | 在 FETCH 之后可被更新的列的名称 | 必须在 FROM 子句 table 中存在,但不需要在 Projection 列表中。所有的列必须都来自同一表。 | 标识符 |
FOR UPDATE 关键字通知数据库服务器可能会有更新,导致它使用比随同 Select 游标更严格的锁。不带有此子句,您不可通过游标修改数据。您可指定哪些列可被更新。
EXEC SQL BEGIN DECLARE SECTION; char fname[ 16]; char lname[ 16]; EXEC SQL END DECLARE SECTION; . . . EXEC SQL connect to 'stores_demo'; /* select statement being prepared contains a for update clause */ EXEC SQL prepare x from 'select fname, lname from customer for update'; EXEC SQL declare xc cursor for x; for (;;) { EXEC SQL fetch xc into $fname, $lname; if (strncmp(SQLSTATE, '00', 2) != 0) break; printf("%d %s %s\n",cnum, fname, lname ); if (cnum == 999) --update rows with 999 customer_num EXEC SQL update customer set fname = 'rosey' where current of xc; } EXEC SQL close xc; EXEC SQL disconnect current;
SELECT . . . FOR UPDATE 语句,像 Update 游标一样,允许您执行那些单独使用 UPDATE 语句不可能执行的更新,因为对更新的决定以及新的数据项的值都可基于该行的原始内容。UPDATE 语句不可查询正在被更新的表。