powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / trigger after insert
15 сообщений из 15, страница 1 из 1
trigger after insert
    #39600638
vlad2018
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Длоброго времени суток! Нужна ваша помощь! Пишу триггер который должен обновлять запись после вставки, но он не работает.. подскажите в чем может быть ошибка т.к. пишу тригер впервые
Код: 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
trigger after insert
    #39600647
Фотография шК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
trigger after insert
    #39600650
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2018, а если по хорошему - перенеси вот это дело
Код: plsql
1.
round(sum * 100) / 100 

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

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

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

Вы имеете в виду, чтоб я в тригере вызывал процедуру которая обновляет запись?
...
Рейтинг: 0 / 0
trigger after insert
    #39600659
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
trigger after insert
    #39600662
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Триггер AFTER уже не обновляет запись -- он AFTER
А в триггере BEFORE достаточно (и необходимо) просто поменять :new.sum := новое значение, а не выполнять UPDATE
...
Рейтинг: 0 / 0
trigger after insert
    #39600665
vlad2018
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
trigger after insert
    #39600668
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2018, триггер тебе вообще не нужен. Перенеси округление в процедуру, где происходит вставка данных в таблицу
...
Рейтинг: 0 / 0
trigger after insert
    #39600669
vlad2018
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав ЛюбомудровТриггер 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
trigger after insert
    #39600675
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
trigger after insert
    #39600684
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
trigger after insert
    #39600692
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
шК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
trigger after insert
    #39600698
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
trigger after insert
    #39600701
vlad2018
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю всех за помощь!
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / trigger after insert
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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