使用 UPDATE 语句更改表中的数据
要更新表或视图中的数据,请使用 UPDATE 语句。
使用 UPDATE 语句,您可以更改每行中满足 WHERE 子句的搜索条件的一个或多个列的值。 UPDATE 语句的结果是表的零行或多行中的一个或多个已更改列值 (取决于满足 WHERE 子句中指定的搜索条件的行数)。 UPDATE 语句如下所示:
UPDATE table-name
SET column-1 = value-1,
column-2 = value-2, ...
WHERE search-condition ...
假设员工已重新定位。 更新 CORPDATA.EMPLOYEE 表以反映移动,运行以下语句:
UPDATE CORPDATA.EMPLOYEE
SET JOB = :PGM-CODE,
PHONENO = :PGM-PHONE
WHERE EMPNO = :PGM-SERIAL;
使用 SET 子句为要更新的每个列指定新值。 SET 子句对要更新的列进行命名,并提供要将这些列更改为的值。 您可以指定以下类型的值:
- 列名。 将该列的当前值替换为同一行中另一列的内容。
- 常量。 将列的当前值替换为 SET 子句中提供的值。
- 空值。 使用关键字 NULL 将列的当前值替换为空值。 必须将该列定义为能够在创建表时包含空值,否则将发生错误。
- 主变量。 将列的当前值替换为主变量的内容。
- 全局变量。 将列的当前值替换为全局变量的内容。
- 专用寄存器。 将列的当前值替换为专用寄存器值; 例如, USER。
- 表达式。 将列的当前值替换为表达式产生的值。
- 标量全查询。 将列的当前值替换为子查询返回的值。
- DEFAULT 关键字。 将列的当前值替换为列的缺省值。 必须为该列定义缺省值,或者允许 NULL 值,否则将发生错误。
以下 UPDATE 语句使用许多不同的值:
UPDATE WORKTABLE
SET COL1 = 'ASC',
COL2 = NULL,
COL3 = :FIELD3,
COL4 = CURRENT TIME,
COL5 = AMT - 6.00,
COL6 = COL7
WHERE EMPNO = :PGM-SERIAL;
要标识要更新的行,请使用 WHERE 子句:
- 要更新单行,请使用仅选择一行的 WHERE 子句。
- 要更新多行,请使用仅选择要更新的行的 WHERE 子句。
可以省略 WHERE 子句。 如果执行此操作,那么 SQL 将使用您提供的值来更新表或视图中的每行。
如果数据库管理器在运行 UPDATE 语句时发现错误,那么它将停止更新并返回负 SQLCODE。 如果指定 COMMIT (*ALL) , COMMIT (*CS) , COMMIT (*CHG) 或 COMMIT (*RR) ,那么不会更改表中的任何行 (此语句已更改的行 (如果有) 将恢复为它们先前的值)。 如果指定了 COMMIT (*NONE) ,那么已更改的任何行 不会 恢复到先前的值。
如果数据库管理器找不到任何符合搜索条件的行,那么将返回 SQLCODE +100。
注: UPDATE 语句可能已更新多行。 更新的行数反映在 SQLCA 的 SQLERRD (3) 中。 此值也可从 GET DIAGNOSTICS 语句中的 ROW_COUNT 诊断项获取。
可通过多种方式使用 UPDATE 语句的 SET 子句来确定要在要更新的每一行中设置的实际值。 以下示例列出了每个列及其相应值:
UPDATE EMPLOYEE
SET WORKDEPT = 'D11',
PHONENO = '7213',
JOB = 'DESIGNER'
WHERE EMPNO = '000270';
您还可以通过指定所有列,然后指定所有值来编写此 UPDATE 语句:
UPDATE EMPLOYEE
SET (WORKDEPT, PHONENO, JOB)
= ('D11', '7213', 'DESIGNER')
WHERE EMPNO = '000270';