【发布时间】:2020-08-08 13:14:14
【问题描述】:
我有下表,用百分比来描述每个行星由哪些化学元素组成。
CREATE TABLE elem_in_planet
(
id_planet INTEGER,
element_symbol CHAR(2),
percent_representation NUMBER CONSTRAINT NN_elem_in_planet NOT NULL,
CONSTRAINT PK_elem_in_planet PRIMARY KEY (id_planet, element_symbol),
CONSTRAINT FK_planet_has_elem FOREIGN KEY (id_planet) REFERENCES planet (id_planet),
CONSTRAINT FK_elem_in_planet FOREIGN KEY (element_symbol) REFERENCES chemical_element (element_symbol)
);
我正在尝试制作一个触发器,当用户向行星添加新元素并且该行星中的元素总和超过 100% 时会发出警告。我想出了这个。
CREATE OR REPLACE TRIGGER elem_in_planet_check
AFTER INSERT OR UPDATE ON elem_in_planet
FOR EACH ROW
DECLARE
sum_var NUMBER;
PRAGMA autonomous_transaction;
BEGIN
SELECT SUM(percent_representation)
INTO sum_var
FROM elem_in_planet
WHERE id_planet = :NEW.id_planet
GROUP BY id_planet;
EXCEPTION
WHEN NO_DATA_FOUND THEN
sum_var := 0;
IF sum_var > 100 THEN
DBMS_OUTPUT.put_line('WARNING: Blah blah.');
END IF;
END;
/
这段代码似乎每次都抛出 NO_DATA_FOUND 异常,即使我已经插入了测试数据并且当我单独运行 SQL 查询时,它也能按预期工作。
我是新手,不明白我做错了什么。
感谢您的建议。
【问题讨论】:
-
与您的问题无关,但您不需要
GROUP BY子句。
标签: sql oracle plsql database-trigger