powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Триггер не хочет работать
20 сообщений из 20, страница 1 из 1
Триггер не хочет работать
    #37863243
ms_AmneZia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу триггер в первый раз, поэтому если тапками - то небольно :) Как-то у меня с ним не сложилось, и он не желает отрабатываться.
Что требуется: при добавлении данных в одну таблицу, запомнить время добавления этих данных и записать его с частью нужных парамеров в другую таблицу.
Подскажите, где косяк!
Код: plaintext
авторCREATE OR REPLACE TRIGGER VTD_IRIS.tgr_defrep_log
BEFORE INSERT OR UPDATE
ON VTD_IRIS.DEF_REPAIRS
REFERENCING NEW AS new OLD AS old
FOR EACH ROW
DECLARE
log_rep DATE;
BEGIN
SELECT TO_DATE (SYSDATE, 'dd.mm.yyyy') INTO log_rep FROM DUAL; --запоминаем сегодняшнюю дату

IF ( :new.k_otch IS NOT NULL
AND :new.k_dp IS NOT NULL
AND :new.odometer IS NOT NULL) если есть данные
THEN
FOR ii
IN (SELECT DISTINCT DR.K_OTCH, DR.K_DP, SD.ID_LCH
FROM VTD_IRIS.DEF_REPAIRS dr, s_otch_sum_dp sd
WHERE DR.K_OTCH = SD.K_OTCH AND DR.K_DP = SD.K_DP
AND DR.ODOMETER BETWEEN SD.UCH_L1 * 100000
AND SD.UCH_L2 * 100000
AND k_defrep = :new.k_defrep) выбираем нужные
LOOP
INSERT INTO vtd_iris.defrep_otch_data (k_dp,
id_lch,
k_otch,
date_defrep)
VALUES (ii.k_dp,
ii.id_lch,
ii.k_otch,
log_rep); заполняем нужную таблицу
END LOOP;
END IF;
EXCEPTION
WHEN OTHERS
THEN
RAISE;
END tgr_defrep_log;
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863255
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ms_AmneZia,
оракл?
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863262
ms_AmneZia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakill,
угу

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863269
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ms_AmneZia,

не глотай ошибки. покажи чего пишет.
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863275
__vvp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ms_AmneZia,

Для начала уберем лишнее. Попробуй так

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
CREATE OR REPLACE TRIGGER VTD_IRIS.tgr_defrep_log
   BEFORE INSERT OR UPDATE
   ON VTD_IRIS.DEF_REPAIRS
--   REFERENCING NEW AS new OLD AS old
   FOR EACH ROW
--DECLARE
--   log_rep   DATE;
BEGIN
--   SELECT TO_DATE (SYSDATE, 'dd.mm.yyyy') INTO log_rep FROM DUAL;--запоминаем сегодняшнюю дату

   IF (    :new.k_otch IS NOT NULL
       AND :new.k_dp IS NOT NULL
       AND :new.odometer IS NOT NULL)--если есть данные
   THEN
      /*FOR ii
         IN (SELECT DISTINCT DR.K_OTCH, DR.K_DP, SD.ID_LCH
               FROM VTD_IRIS.DEF_REPAIRS dr, s_otch_sum_dp sd
              WHERE DR.K_OTCH = SD.K_OTCH AND DR.K_DP = SD.K_DP
                    AND DR.ODOMETER BETWEEN SD.UCH_L1 * 100000
                                        AND SD.UCH_L2 * 100000
                    AND k_defrep = :new.k_defrep)выбираем нужные
      LOOP*/
         INSERT INTO vtd_iris.defrep_otch_data (k_dp,
                                                id_lch,
                                                k_otch,
                                                date_defrep)
              VALUES (:new.k_dp,
                      :new.id_lch,
                      :new.k_otch,
                      SYSDATE);--заполняем нужную таблицу
--      END LOOP;
   END IF;
/*EXCEPTION
   WHEN OTHERS
   THEN
      RAISE;*/
END tgr_defrep_log;
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863277
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintне глотай ошибки. покажи чего пишет.
Мутация вестимо :)
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863279
ms_AmneZia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vint,
в том-то и дело, что ничего. Вроде как выполнилось, а конечная таблица - пустая :(
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863286
ms_AmneZia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__vvp_, ага. Так все получилось. Видимо, в соединении с другой таблицей ошибка. Ушла искать косяк. Спасибо!
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863290
__vvp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ms_AmneZia__vvp_, ага. Так все получилось. Видимо, в соединении с другой таблицей ошибка. Ушла искать косяк. Спасибо!

Не спеши, я вторую таблицу (s_otch_sum_dp) не заюзал :))
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863295
semenar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непонятно зачем в ведомой талице, данные, когда была внесена запись в родителя. Добавьте поле, сделайте его default sysdate.
авторв том-то и дело, что ничего. Вроде как выполнилось, а конечная таблица - пустая :(
commit не забыли?
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863296
ms_AmneZia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__vvp_, я поняла. Хочу попробовать без цикла сделать. Кажется, я с ним перемудрила, можно и обойтись.
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863297
ms_AmneZia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semenar, не забывала :)
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863300
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ms_AmneZiaв том-то и дело, что ничего. Вроде как выполнилось, а конечная таблица -
пустая :(
Потому что триггер - BEFORE. Выбирать ещё не вставленную запись бесполезно. (А уже
вставленную - глупо.)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863304
__vvp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ms_AmneZia__vvp_, я поняла. Хочу попробовать без цикла сделать. Кажется, я с ним перемудрила, можно и обойтись.
Еще в триггере нельзя обращаться к изменяемой таблице. Будет т.н. мутация
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863310
ms_AmneZia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ура-ура, заработало!

автор
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
CREATE OR REPLACE TRIGGER VTD_IRIS.tgr_defrep_log
   BEFORE INSERT OR UPDATE
   ON VTD_IRIS.DEF_REPAIRS
   FOR EACH ROW
DECLARE
   p_lch   NUMBER;
BEGIN
   IF (    :new.k_otch IS NOT NULL
       AND :new.k_dp IS NOT NULL
       AND :new.odometer IS NOT NULL)                        --если есть данные 
   THEN
      SELECT id_lch
        INTO p_lch
        FROM s_otch_sum_dp
       WHERE     k_otch = :new.k_otch
             AND k_dp = :new.k_dp
             AND :new.odometer BETWEEN uch_l1 * 100000 AND uch_l2 * 100000;

      INSERT INTO vtd_iris.defrep_otch_data (k_dp,
                                             id_lch,
                                             k_otch,
                                             date_defrep)
           VALUES (:new.k_dp,
                   p_lch,
                   :new.k_otch,
                   SYSDATE);                         --заполняем нужную таблицу 
   END IF;
END tgr_defrep_log;
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863316
ms_AmneZia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__vvp_Еще в триггере нельзя обращаться к изменяемой таблице. Будет т.н. мутация
т.е. я не могу писать триггер для добавления данных во вторую таблицу при изменении первой? оО
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863320
semenar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ms_AmneZia__vvp_Еще в триггере нельзя обращаться к изменяемой таблице. Будет т.н. мутация
т.е. я не могу писать триггер для добавления данных во вторую таблицу при изменении первой? оО
А почитать топ вопросов? Или воспользоватся поиском по форуму?
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863341
__vvp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ms_AmneZiaУра-ура, заработало!


Существует конструкция INSERT SELECT. Т.е. можно одним оператором сделать
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863398
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ms_AmneZiaУра-ура, заработало!
Вы ещё вернётесь, когда ваш триггер сработает несколько раз подряд для одной и той же
записи. Не нужно использовать для протоколирования before-триггера.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Триггер не хочет работать
    #37863904
ms_AmneZia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, я вчера еще исправила.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Триггер не хочет работать
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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