триггер oracle не правильно работает

программирование программы проблема базы данных oracle

имеется таблица, в которой есть поля цена, количество и сумма. Нужно при записи в таблицу, чтобы автоматом считала сумму=цена*количество.


create table postavka
(
postav_id int,
postav_cena int,
postav_kol int,
postav_summa int);


создал триггер не срабатывает "is mutating"


CREATE OR REPLACE TRIGGER after_update
AFTER UPDATE
ON postavka
FOR EACH ROW

DECLARE
summa integer;
cena integer;
kol int;
BEGIN

SELECT s.postav_cena INTO cena
FROM postavka s;

SELECT s.postav_summa INTO summa
FROM postavka s;

SELECT s.postav_kol INTO kol
FROM postavka s;

summa:=cena*kol;
INSERT INTO postavka
( postav_id,
postav_cena,
postav_kol,
postav_summa )
VALUES
( :new.postav_id,
:new.postav_cena,
:new.postav_kol,
summa );

END;
Ответы:
>создал триггер не срабатывает "is mutating"
Сначала не заметил этого признания, читал и охреневал от кода. Рановато тебе еще триггеры писать, ты даже не понимаешь ,что они делают. Вообще такой триггер пишется на BEFORE update (а не на after update как у тебя) и там просто инициализируются :new.summ Но селект из своей же таблицы  в триггере (!!!) потом инсерт в эту же таблицу (!!!!!!!!!!) это дикий ужас. Забей на это, пиши сначала более протсые триггеры


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.