У меня есть следующая таблица, которая описывает, из каких химических элементов каждый pl anet состоит из процентного значения.
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)
);
Я пытаюсь создать триггер, который предупреждает пользователей, когда они добавляют новый элемент до pl anet и сумма элементов в этом pl anet превышает 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, он работает как ожидалось.
Я новичок в этом и не понимаю, что делаю не так.
Спасибо за любой совет.