【发布时间】:2018-03-24 04:05:50
【问题描述】:
我有 3 张桌子:
portees : 表示具有多列的电力线(por_cur、设备 A、设备 B、...、iqu_cur、检查)
cab_portees : 代表线路上的特定设备(一条线路上可以有许多这些设备的实例), 列(id、por_cur(来自 portees 的外键)、...、iqu_cur)
indice_qualite :表示其他两个表之一的 1 个属性,这些表被认为是重要数据。列(表名、属性名、...、iqu_cur、检查)
我们检查表 portees 和 cab_portees 中的数据以确保其正确,当检查一行时,我们将 portees.examine 更新为“1”。我想触发自动更新表 indice_qualite :将表中的所有设备放入以检查 = '1'。
我无法获得正确的语法,这就是我所拥有的:
create or replace trigger PORTEES_EXAMINE_TRIGGER
AFTER UPDATE ON PORTEES
FOR EACH ROW
BEGIN
if :new.EXAMINE != :old.EXAMINE then
UPDATE (SELECT INDICE_QUALITE.EXAMINE FROM
INDICE_QUALITE, PORTEES
WHERE PORTEES.IQU_CUR = INDICE_QUALITE.IQU_CUR
AND PORTEES.IQU_CUR = :old.IQU_CUR
UNION
SELECT INDICE_QUALITE.EXAMINE FROM
INDICE_QUALITE, CAB_PORTEES
WHERE CAB_PORTEES.IQU_CUR = INDICE_QUALITE.IQU_CUR
AND CAB_PORTEES.POR_CUR = :old.POR_CUR)
SET INDICE_QUALITE.EXAMINE = :new.EXAMINE;
end if;
END PORTEES_EXAMINE_TRIGGER;
有什么想法吗?
【问题讨论】:
-
您不能使用连接编写更新查询。您需要使用合并
-
您要更新哪个表?您可以在更新语句的 where 子句中使用规则(可能使用存在),因此您应该只重写选择要更新的行的查询。或者使用合并。
-
我正在更新表 indice_qualite,我会看看合并。
-
INDICE_QUALITE 甚至是这些表中的列吗?
-
顺便说一句。 ORA-00904 表示标识符无效,而不是表不存在!您显然是在尝试在 select 语句中选择 TABLE,而不是列。
标签: sql oracle join sql-update database-trigger