Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Тригер, вставка по условию / 15 сообщений из 15, страница 1 из 1
18.07.2018, 10:29
    #39675467
iv_roman_vl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер, вставка по условию
Всем привет.

Можно ли, в тригере при вставке добавлять новую или обновить нужную строку?

например ,

если (выражение) равно true, то вставляем новую запись
если нет то обновляем нужную запись

если да то пример скинте плиз
...
Рейтинг: 0 / 0
18.07.2018, 10:32
    #39675473
шК0ДЕР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер, вставка по условию
...
Рейтинг: 0 / 0
18.07.2018, 10:33
    #39675474
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер, вставка по условию
...
Рейтинг: 0 / 0
18.07.2018, 11:00
    #39675502
iv_roman_vl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер, вставка по условию
Суть такова, что перед вставкой я проверяю, есть ли в этой таблице такая же запись, если да то я не создаю новую запись а просто делаю update существующей.

И почему то при select к этой таблице в тригере exception.
...
Рейтинг: 0 / 0
18.07.2018, 11:06
    #39675506
iv_roman_vl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер, вставка по условию
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create or replace TRIGGER имя_тригера BEFORE
  INSERT ON t1 FOR EACH ROW 
  DECLARE
	v_count NUMBER;
  BEGIN
    IF :NEW.ID IS NULL THEN
      SELECT имя_сиквенса.NEXTVAL INTO :NEW.ID FROM dual;
      select count(*) into v_count from t1;
    END IF;

END;



Убираю
Код: plsql
1.
select count(*) into v_count  from t1;


и все ок...

если например сделать с select к другой таблице:
Код: plsql
1.
select count(*) into v_count from MPG.EMP;


то все ок
...
Рейтинг: 0 / 0
18.07.2018, 11:19
    #39675513
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер, вставка по условию
iv_roman_vlСуть такова, что перед вставкой я проверяю, есть ли в этой таблице такая же запись, если да то я не создаю новую запись а просто делаю update существующей.

И почему то при select к этой таблице в тригере exception.Потому что не понимаешь простых вещей.
Выкинь свой говнокод подальше и прислушайся к шкодеру.
...
Рейтинг: 0 / 0
18.07.2018, 11:31
    #39675524
iv_roman_vl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер, вставка по условию
Elic,

MERGE для того что бы кастомно склеить две таблицы по ключу.
У меня же имеется запрос в котором есть строки с одинаковыми ключами. И мне надо эти строки "схлопнуть" в одну, записав недостающие данные либо из одной либо из другой.

Попробую конечно MERGE скормить запрос сам на себя, посмотрим что из этого выйдет)
...
Рейтинг: 0 / 0
18.07.2018, 11:36
    #39675527
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер, вставка по условию
iv_roman_vlУ меня же имеется запрос в котором есть строки с одинаковыми ключами. И мне надо эти строки "схлопнуть" в одну, записав недостающие данные либо из одной либо из другой.Быдло-мышление.
Не создавай "дублей" в данных - не придётся мучаться, чтобы от них избавиться.
...
Рейтинг: 0 / 0
18.07.2018, 11:40
    #39675533
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер, вставка по условию
ElicНе создавай "дублей" в данных - не придётся мучаться, чтобы от них избавиться.Иногда дубли создаются одними, а убирать приходится другим
...
Рейтинг: 0 / 0
18.07.2018, 11:41
    #39675536
iv_roman_vl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер, вставка по условию
Elic,

Во первых, эти данные из другой системы.
Во вторых, это не дубли. В сторонней системе это две отдельные записи, несущие свою смысловую загрузку. В нашей системе данные по этим строкам совмещаются в одну запись. Так как эти "дубли", как ты их называешь, дополняют друг друга.
...
Рейтинг: 0 / 0
18.07.2018, 11:42
    #39675538
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер, вставка по условию
iv_roman_vlВ нашей системе данные по этим строкам совмещаются в одну запись.Ну так совмести их сразу в запросе.
...
Рейтинг: 0 / 0
18.07.2018, 12:02
    #39675550
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер, вставка по условию
Есть еще INSTEAD OF триггеры
...
Рейтинг: 0 / 0
18.07.2018, 12:15
    #39675562
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер, вставка по условию
Вячеслав ЛюбомудровЕсть еще INSTEAD OF триггерыОригинальный способ сделать group by.
...
Рейтинг: 0 / 0
19.07.2018, 07:40
    #39675983
iv_roman_vl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер, вставка по условию
Пробовал MERGE,
как я понял он предназначен для вставки/обновления данных в таблицу с уже существующими данными, по полям базовой и донорской таблицы.
У меня же изначально пул данных приходит одним запросом с внешней среды и мне надо внутри этих данных, по некоторым условиям, схлопнуть строки.
Соответственно у меня нет базовой таблицы, с которой сравнивать поля. Можно конечно заморочится и написать два одинаковых запроса к внешней системе и применить к ним MERGE. Но постольку поскольку, запрос адский по составу и по времени выполнения.
Этот вариант не подошел.

Пробовал INSTEAD OF,
На сколько я понял, он проверяет дубли для инсертов внутри тригера(на внешние таблицы).
А мне нужно проверять дубли на самом инсерте в текущую таблицу.

Решил задачу, другим способом. Может примитивно, но работает быстро.
1) Запрос ко внешним ресурсам и запись результата в таблицу t1.
2) Запрос к таблице t1:
ищу те строки которые надо схлопнуть, при чем именно те которые будут нести доп информацию.
из всех записей t1 вычитаю выше найденные строки.
Селектом беру результат по разнице и селектом по ключам достаю значения ранее вычтенных строк.

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

А то я представил как я это буду делать с group by , MERGE, INSTEAD OF на минуту стало плохо)

Всем спасибо за участие.
Я не гуру sql так что может не правильно воспринял предложенные методы...
...
Рейтинг: 0 / 0
19.07.2018, 07:55
    #39675991
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер, вставка по условию
iv_roman_vlЯ не гуру sql так чтоговнокодь дальше.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Тригер, вставка по условию / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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