UPDATE
使用 UPDATE
命令可更新表中现有数据行中的一个或多个列。
语法
UPDATE [database_name.]object_name
[ VIA value_of_primary_key_column,... ]
SET column_name = expression,...
[ WHERE condition ];
可以在计算中使用列值。 在以下示例中,当已确认警报时,
Severity
设置为 0
:update status set Severity=(1-Acknowledged)*Severity;
无法更新系统维护的列 (例如 Serial) 或将 NOMODIFY 属性设置为 TRUE
的列。 当 NOMODIFY 属性设置为 TRUE
时,无法在初始 INSERT 命令后更改列的值。
对于其他列,或者当 NOMODIFY 属性设置为 FALSE
时,可以使用 WHERE 子句或 VIA 子句来更新表中的行。
使用 WHERE 子句
如果包含 WHERE 子句,那么将仅更新符合 condition 中指定的条件的行。 如果未在 WHERE 子句中指定条件,那么将更新所有行。
WHERE 子句可以执行与Tivoli Netcool/OMNIbus 早期版本中 VIA 子句相同的功能。 如果在 WHERE 子句中指定了主键,ObjectServer将不会执行全表扫描,而是直接访问使用主键的记录。 以下示例显示了 WHERE 子句的一些用法。
对于
Node
等于 Fred 的 alerts.status 表的行,要将 Severity
设置为 0 ,请输入:update alerts.status set Severity = 0 where Node = 'Fred';
要搜索
Severity
等于 1 且 Node
等于 Fred 的行,然后将 Severity
设置为 0 并将 Summary
字段更改为字符串 废弃,请输入:
update alerts.status set Severity = 0, Summary = 'Discarded'
where Severity = 1 and Node = 'Fred';
使用 VIA 子句
对于 Tivoli Netcool/OMNIbus V7.2 ,不推荐使用 VIA 子句,但该子句仍然有效。 它的函数现在可以由 WHERE 子句执行。
如果您知道要更新的行的主键值,那么可以使用 VIA 子句来指定该值。 如果有多个主键列,那么必须按顺序指定值并以逗号 (,) 分隔。 字符串值必须用单引号 (') 括起。
如果要更新多行,那么必须将每行的主键括在方括号 ([]) 中并以逗号 (,) 分隔。
VIA 子句对于记录 SQL 很有用。 例如,它可用于让触发器的维护人员知道正在使用主键执行 UPDATE。
以下示例显示如何使用 UPDATE VIA 命令更新多个主键:
update alerts.status via ['722Identifier722'],['294Identifier294'] set Severity = 3;
给定具有以下模式的表,示例 1 显示了如何使用多个主键更新表中的单行,而示例 2 显示了如何使用多个主键更新表中的多行 (在本例中为三行)。
示例模式:
create table alerts.example persistent ( col1 int primary key, col2 int primary key,
col3 int primary key, col4 int );
示例 1:
update alerts.example via 1,1,1 SET col4 = 10;
示例 2:
update alerts.example via [1,1,1],[2,2,2],[3,3,3] SET col4 = 33;