Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / trigger after insert / 15 сообщений из 15, страница 1 из 1
12.02.2018, 15:03
    #39600638
vlad2018
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
trigger after insert
Длоброго времени суток! Нужна ваша помощь! Пишу триггер который должен обновлять запись после вставки, но он не работает.. подскажите в чем может быть ошибка т.к. пишу тригер впервые
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create or replace trigger s_round
after insert
on s_doc
for each row
  begin

  update s_doc
  set sum=  round(sum*100)/100
  where row_id = :old.row_id;

  end s_round_price;
...
Рейтинг: 0 / 0
12.02.2018, 15:10
    #39600647
шК0ДЕР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
trigger after insert
vlad2018, поменяй :old.row_id на :new.row_id, ибо old.row_id = null на момент инсерта. Это же не UPDATE :)

Код: plsql
1.
2.
3.
4.
5.
6.
create or replace trigger s_round
  after insert on s_doc
  for each row
begin
  update s_doc set sum = round(sum * 100) / 100 where row_id = :new.row_id;
end s_round_price;
...
Рейтинг: 0 / 0
12.02.2018, 15:14
    #39600650
шК0ДЕР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
trigger after insert
vlad2018, а если по хорошему - перенеси вот это дело
Код: plsql
1.
round(sum * 100) / 100 

в процедуру, которая INSERT данных делает в таблицу. Раскидывать по кускам функционал ни к чему, пусть все находится в одном месте.
...
Рейтинг: 0 / 0
12.02.2018, 15:24
    #39600654
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
trigger after insert
vlad2018
Код: plsql
1.
round(sum*100)/100

Код: plsql
1.
round(sum, 2)
...
Рейтинг: 0 / 0
12.02.2018, 15:28
    #39600657
vlad2018
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
trigger after insert
шК0ДЕРvlad2018, а если по хорошему - перенеси вот это дело
Код: plsql
1.
round(sum * 100) / 100 

в процедуру, которая INSERT данных делает в таблицу. Раскидывать по кускам функционал ни к чему, пусть все находится в одном месте.

Вы имеете в виду, чтоб я в тригере вызывал процедуру которая обновляет запись?
...
Рейтинг: 0 / 0
12.02.2018, 15:29
    #39600659
Sheldon Cooper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
trigger after insert
шК0ДЕРvlad2018, поменяй :old.row_id на :new.row_id, ибо old.row_id = null на момент инсерта. Это же не UPDATE :)

Код: plsql
1.
2.
3.
4.
5.
6.
create or replace trigger s_round
  after insert on s_doc
  for each row
begin
  update s_doc set sum = round(sum * 100) / 100 where row_id = :new.row_id;
end s_round_price;
...
Рейтинг: 0 / 0
12.02.2018, 15:31
    #39600662
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
trigger after insert
Триггер AFTER уже не обновляет запись -- он AFTER
А в триггере BEFORE достаточно (и необходимо) просто поменять :new.sum := новое значение, а не выполнять UPDATE
...
Рейтинг: 0 / 0
12.02.2018, 15:32
    #39600665
vlad2018
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
trigger after insert
Sheldon CooperшК0ДЕРvlad2018, поменяй :old.row_id на :new.row_id, ибо old.row_id = null на момент инсерта. Это же не UPDATE :)

Код: plsql
1.
2.
3.
4.
5.
6.
create or replace trigger s_round
  after insert on s_doc
  for each row
begin
  update s_doc set sum = round(sum * 100) / 100 where row_id = :new.row_id;
end s_round_price;



Что вы имеете ввиду?
...
Рейтинг: 0 / 0
12.02.2018, 15:35
    #39600668
шК0ДЕР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
trigger after insert
vlad2018, триггер тебе вообще не нужен. Перенеси округление в процедуру, где происходит вставка данных в таблицу
...
Рейтинг: 0 / 0
12.02.2018, 15:35
    #39600669
vlad2018
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
trigger after insert
Вячеслав ЛюбомудровТриггер AFTER уже не обновляет запись -- он AFTER
А в триггере BEFORE достаточно (и необходимо) просто поменять :new.sum := новое значение, а не выполнять UPDATE

create or replace trigger s_round
before insert on s_doc
for each row
begin

:new.sum= round(:new.sum,2)
where row_id = :new.row_id;

end s_round;

Так?
...
Рейтинг: 0 / 0
12.02.2018, 15:39
    #39600675
шК0ДЕР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
trigger after insert
create or replace trigger s_round
before insert on s_doc
for each row
begin

:new.sum= round(:new.sum,2)
where row_id = :new.row_id;

end s_round;

Так?[/quot]
Раз уж пошла такая пьянка, то без where row_id = :new.row_id
Обрабатывается каждая вставляемая строка, условие ни к чему
...
Рейтинг: 0 / 0
12.02.2018, 15:50
    #39600684
шК0ДЕР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
trigger after insert
vlad2018, на пальцах объясню. У тебя есть процедура в которой записан запрос (к примеру)
Код: plsql
1.
insert into s_doc(row_id, sum, some_data) values(1, value, 'sdasda');

После вставки срабатывает тригер на UPDATE поля sum.

Внимание вопрос, зачем тебе тригер, если можно чуть-чуть переписать запрос на INSERT вот так
Код: plsql
1.
insert into s_doc(row_id, sum, some_data) values(1, round(value, 2), 'sdasda');
...
Рейтинг: 0 / 0
12.02.2018, 16:02
    #39600692
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
trigger after insert
шК0ДЕРvlad2018, триггер тебе вообще не нужен. Перенеси округление в процедуру, где происходит вставка данных в таблицу

Тут вообще ничего не нужно кроме правильного определения поля. Oпредели поле с 2мя дробными а Oracle сам и округлит:

Код: 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.
SQL> create table tbl(n1 number,n2 number(*,2))
  2  /

Table created.

SQL> insert
  2    into tbl
  3    values(round(1234567890 * 100) / 100,1234567890)
  4  /

1 row created.

SQL> insert
  2    into tbl
  3    values(round(1.4567890 * 100) / 100,1.4567890)
  4  /

1 row created.

SQL> insert
  2    into tbl
  3    values(round(1.34567890 * 100) / 100,1.34567890)
  4  /

1 row created.

SQL> select  *
  2    from  tbl
  3  /

        N1         N2
---------- ----------
1234567890 1234567890
      1.46       1.46
      1.35       1.35

SQL> 



SY.
...
Рейтинг: 0 / 0
12.02.2018, 16:11
    #39600698
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
trigger after insert
vlad2018Так?
нет

Код: plsql
1.
2.
3.
4.
5.
6.
7.
create or replace trigger s_round
before insert on s_doc for each row
begin
    
   :new.sum=  round(:new.sum,2); --или формула как Вы представляете округление

end s_round;



.....
stax
...
Рейтинг: 0 / 0
12.02.2018, 16:16
    #39600701
vlad2018
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
trigger after insert
Благодарю всех за помощь!
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / trigger after insert / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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