可以对可修改视图使用 UPDATE 语句。然而,数据库服务器不支持更新任何派生列。派生列是由 CREATE VIEW 语句的选择列表中的表达式(例如 order_date + 30)生成的列。
CREATE VIEW response(user_id, received, resolved, duration) AS SELECT user_id, call_dtime, res_dtime, res_dtime - call_dtime FROM cust_calls WHERE user_id = USER; UPDATE response SET resolved = TODAY WHERE resolved IS NULL;
由于视图的 duration 列表示一个表达式,所以不能更新该列(数据库服务器无法决定如何在表达式命名的两个列之间分布更新值,即使在理论上也无法这样做)。但如果没有在 SET 子句中指定派生列,那么可以将视图视为表来执行更新。
即使基础表的行是唯一的,视图也可能会返回重复的行。无法对各重复行加以区分。如果更新一组重复行中的其中一行(例如:如果使用游标来更新 WHERE CURRENT),那么无法确定基础表中的哪一行接收到更新。