无法更新SQL表中的列

时间:2019-01-23 11:08:25

标签: sql db2 sql-update updatable-views

我创建了一个视图

CREATE VIEW `distance` AS
    SELECT 
        `rv`.`id` AS `id`,
        `rv`.`TIMESTAMP` AS `TIMESTAMP`,
        `rv`.`name` AS `name`,
        `rr`.`distance` AS `distance`,
        `false` AS `new_name`
    FROM
        (`recognition_view` `rv`
        JOIN `raw_recognition` `rr` ON ((`rv`.`rr_id` = `rr`.`id`)))

我需要更新new_name列,但得到响应错误列'new_name'不可更新。有办法吗?

2 个答案:

答案 0 :(得分:1)

FROM子句中有多个表。此观点不可更新。了解有关Updatable views的信息。 您可以创建一个instead of trigger来实现自己的目标。

答案 1 :(得分:0)

new_name不属于您的表。它在您的视图中构造,并且始终设置为false。问自己一个问题:此列的更新结果是什么?它会保留在哪里?

如果希望能够更新此值,则应考虑将其添加到其他表之一,或创建一个新表并将其加入现有视图中。

您可以将new_name信息存储在recognition_viewraw_recognition表中。为了简单起见,我将解释如何进行后者:

CREATE TABLE raw_recognition (
    ...
    new_name NUMBER(1)
)

,然后在您的CREATE VIEW中更改

`false` AS `new_name`

`rr.new_name` AS `new_name`