通过加入视图和另一个 Table 创建的 Table 所做的更改是否会影响基于 Table 的原始视图?
Do Changes Made on Table Created by Joining a View and an Another Table Affect Original Table View Based On?
假设我在 table 上创建了一个视图。如果我在我的视图中更改了一些记录,原始的 table 也会更改。如果我将此视图与另一个 table 合并,并更改我通过合并获得的此结果 table 的一些记录,原始 table 所基于的视图是否也会更改?
我觉得你的问题很混乱,评论太长了。
Suppose I have a view created on a table. If I change some record on my view, the original table is also changed too.
这没有多大意义。通常,您不修改 views,而是修改基表。您更改 基表 中的数据,这会反映在视图中。
您所说的是可以使用 而不是 触发视图。这些可以更改基表——或任何与此相关的内容。它们完全在您的控制之下,实际上与 Oracle 功能无关(除了 Oracle 允许在视图上存在 instead of
触发器)。
JOIN
是SELECT
语句中的操作,不修改数据。再一次,如果数据发生变化,那将通过 而不是 触发器,这完全在您的控制之下。
我想您可能对术语感到困惑。如果您的数据库的行为与您描述的一样,那么您(或其他人)已经付出了一些努力使其表现如此。
原则上,是的,如果视图的构造方式使得底层 table 可通过视图更新。例如,假设我有一个名为 TABLE_1 的 table 并创建一个视图 VIEW_1,如下所示:
CREATE OR REPLACE VIEW VIEW_1 AS
SELECT *
FROM TABLE_1
如果我发出更新语句
UPDATE VIEW_1
SET FIELD_N = 'XYZ'
WHERE KEY_1 = 123
Oracle 足够聪明,可以将更新传递给底层 table,并且 TABLE_1 将被更新。
但是,任何复杂的视图都很可能包含使视图不可更新的操作。所以假设我有以下 VIEW_2:
CREATE OR REPLACE VIEW VIEW_2 AS
SELECT KEY_1,
FIELD_N,
SUM(SOME_OTHER_FIELD) AS OTHER_SUM,
MIN(YADDA_YADDA) AS MIN_YADDA
FROM TABLE_1
GROUP BY KEY_1,
FIELD_N
此视图的更新将失败并出现 ORA-01732: data manipulation operation not legal on this view
错误。所以能否通过视图更新很大程度上取决于视图执行的操作。
假设我在 table 上创建了一个视图。如果我在我的视图中更改了一些记录,原始的 table 也会更改。如果我将此视图与另一个 table 合并,并更改我通过合并获得的此结果 table 的一些记录,原始 table 所基于的视图是否也会更改?
我觉得你的问题很混乱,评论太长了。
Suppose I have a view created on a table. If I change some record on my view, the original table is also changed too.
这没有多大意义。通常,您不修改 views,而是修改基表。您更改 基表 中的数据,这会反映在视图中。
您所说的是可以使用 而不是 触发视图。这些可以更改基表——或任何与此相关的内容。它们完全在您的控制之下,实际上与 Oracle 功能无关(除了 Oracle 允许在视图上存在 instead of
触发器)。
JOIN
是SELECT
语句中的操作,不修改数据。再一次,如果数据发生变化,那将通过 而不是 触发器,这完全在您的控制之下。
我想您可能对术语感到困惑。如果您的数据库的行为与您描述的一样,那么您(或其他人)已经付出了一些努力使其表现如此。
原则上,是的,如果视图的构造方式使得底层 table 可通过视图更新。例如,假设我有一个名为 TABLE_1 的 table 并创建一个视图 VIEW_1,如下所示:
CREATE OR REPLACE VIEW VIEW_1 AS
SELECT *
FROM TABLE_1
如果我发出更新语句
UPDATE VIEW_1
SET FIELD_N = 'XYZ'
WHERE KEY_1 = 123
Oracle 足够聪明,可以将更新传递给底层 table,并且 TABLE_1 将被更新。
但是,任何复杂的视图都很可能包含使视图不可更新的操作。所以假设我有以下 VIEW_2:
CREATE OR REPLACE VIEW VIEW_2 AS
SELECT KEY_1,
FIELD_N,
SUM(SOME_OTHER_FIELD) AS OTHER_SUM,
MIN(YADDA_YADDA) AS MIN_YADDA
FROM TABLE_1
GROUP BY KEY_1,
FIELD_N
此视图的更新将失败并出现 ORA-01732: data manipulation operation not legal on this view
错误。所以能否通过视图更新很大程度上取决于视图执行的操作。