powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Триггер копирование записи до обновления из одной таблицы в другую
10 сообщений из 10, страница 1 из 1
Триггер копирование записи до обновления из одной таблицы в другую
    #39890228
illiona
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create or replace TRIGGER trigger_services
   AFTER UPDATE OF id_tariff ON services
   FOR EACH ROW
DECLARE 
  Q date;
  qq VARCHAR2(1000);
BEGIN    
select v.date_start into q
     from services s
     LEFT JOIN validity_period v ON (s.id_services=v.id_services and s.id_abonent=v.id_abonent)
      where s.id_services=1 and s.id_abonent=1;

qq:= 'INSERT INTO arhif_tariff select new.ID_tariff,  new.id_services,new.id_abonent,new.date_smeni_teriff,Q FROM DUAL';
EXECUTE IMMEDIATE qq ;
END;


Добрый день. Мне надо при изменении записи id_tariff в таблице services, поместить в другую старые записи
...
Рейтинг: 0 / 0
Триггер копирование записи до обновления из одной таблицы в другую
    #39890233
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illionaМне надо при изменении записи id_tariff в таблице services, поместить в другую старые записи
Для этого достаточно одного INSERT. Ни SELECT, ни EXECUTE IMMEDIATE не нужны.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Триггер копирование записи до обновления из одной таблицы в другую
    #39890265
illiona
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне selet надо выбрать одну дату,которая находится в другой таблице и потом ее вставить при insert

Как в триггере организовать select потом insert, отдельно или в один запррос
...
Рейтинг: 0 / 0
Триггер копирование записи до обновления из одной таблицы в другую
    #39890275
illiona
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create or replace TRIGGER trigger_services
AFTER UPDATE of id_tariff ON services
FOR EACH ROW
BEGIN
   IF :NEW.id_tariff != :old.id_tariff
   THEN
      INSERT INTO arhif_tariff (ID_tariff, id_services,id_abonent,date_smeni_teriff,data_start)
         select s.id_tariff,s.id_services,s.id_abonent,sysdate,v.date_start
         from services s
         LEFT JOIN validity_period v ON (s.id_services=v.id_services and s.id_abonent=v.id_abonent)
         where s.id_services=1 and s.id_abonent=1;
   END IF;
END  trigger_services;



ошибка
Error starting at line : 211 in command -
update services set id_tariff=5 where id_services=1
Error report -
ORA-04091: table JULIA.SERVICES is mutating, trigger/function may not see it
ORA-06512: at "JULIA.TRIGGER_SERVICES", line 7
ORA-04088: error during execution of trigger 'JULIA.TRIGGER_SERVICES'

если просто insert То все работает, а через триггер нет
...
Рейтинг: 0 / 0
Триггер копирование записи до обновления из одной таблицы в другую
    #39890276
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illiona,

Убери выборку из services.
...
Рейтинг: 0 / 0
Триггер копирование записи до обновления из одной таблицы в другую
    #39890278
alex-ls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illiona
если просто insert То все работает, а через триггер нет

в триггере итак есть все денные, безо всяких select они известны. :old.
...
Рейтинг: 0 / 0
Триггер копирование записи до обновления из одной таблицы в другую
    #39890282
illiona
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
date_start мне нужно взять из другой таблицы validity_period, не на которую накладывается триггер
...
Рейтинг: 0 / 0
Триггер копирование записи до обновления из одной таблицы в другую
    #39890283
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illiona
date_start мне нужно взять из другой таблицы validity_period, не на которую накладывается триггер
Готовя тебя к лабе преподы должны были хоть что-то тебе объяснить.
...
Рейтинг: 0 / 0
Триггер копирование записи до обновления из одной таблицы в другую
    #39890341
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illiona
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create or replace TRIGGER trigger_services
AFTER UPDATE of id_tariff ON services
FOR EACH ROW
BEGIN
   IF :NEW.id_tariff != :old.id_tariff
   THEN
      INSERT INTO arhif_tariff (ID_tariff, id_services,id_abonent,date_smeni_teriff,data_start)
         select s.id_tariff,s.id_services,s.id_abonent,sysdate,v.date_start
         from services s
         LEFT JOIN validity_period v ON (s.id_services=v.id_services and s.id_abonent=v.id_abonent)
         where s.id_services=1 and s.id_abonent=1;
   END IF;
END  trigger_services;



ошибка
Error starting at line : 211 in command -
update services set id_tariff=5 where id_services=1
Error report -
ORA-04091: table JULIA.SERVICES is mutating, trigger/function may not see it
ORA-06512: at "JULIA.TRIGGER_SERVICES", line 7
ORA-04088: error during execution of trigger 'JULIA.TRIGGER_SERVICES'

если просто insert То все работает, а через триггер нет


1) есть of id_tariff то IF :NEW.id_tariff != :old.id_tariff не надо (тем более что он іф не совсем правильный)

2) дату ищите примерно так
select v.date_start
into переменная
from validity_period v WHERE (v.id_services=:old.id_services and v.id_abonent=:old.id_abonent)
(мож :new от логики зависит)
+ no_data_found

3) inset получится примерно такой
INSERT INTO arhif_tariff (ID_tariff, id_services,id_abonent,date_smeni_teriff,data_start) values (:old.id_tariff,:old.id_services,:old.id_abonent,sysdate,переменная);

можно и через inset select from (мож даже так и оптимальнее, но я так почему-то не делал)

ps
если не получится, нарисую триггер целиком

.....
stax
...
Рейтинг: 0 / 0
Триггер копирование записи до обновления из одной таблицы в другую
    #39890356
illiona
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
Все спасибо, получилось
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Триггер копирование записи до обновления из одной таблицы в другую
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]