powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как вызвать функцию через триггер?
16 сообщений из 16, страница 1 из 1
как вызвать функцию через триггер?
    #39306738
sonrisa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
У меня есть таблица.
TMP_TEST_TABLE (COL1 NUMBER (ИД), COL2 NUMBER, COLSUM NUMBER)

Я написала триггер, который заполняет поле COLSUM из этой таблицы по мере заполнения поля соl2 из этой же таблицы:

create or replace
trigger TR_TBL_TEST before insert
on TMP_TEST_TABLE
for each row
begin
:new.colsum := :new.col2;
end TR_TBL_TEST;

Все работает.
Я решила попробовать вызвать в триггере функцию, выполняющую то же действие:

create or replace
FUNCTION F_NEW1
(v_COL1 IN number
)

RETURN NUMBER IS

RESULT NUMBER;
v_COL2 NUMBER;
BEGIN

SELECT COL2
INTO v_COL2
FROM TMP_TEST_TABLE
WHERE COL1 = v_COL1;

result:= v_COL2;
RETURN(RESULT);
END;

create or replace
trigger TR_TBL_TEST before insert
on TMP_TEST_TABLE
for each row
begin
:new.colsum := F_NEW1(:new.col1);
end TR_TBL_TEST;

Ничего не получилось.
Ошибка:
One error saving changes to table "SYSTEM"."TMP_TEST_TABLE":
Row 6: ORA-01403: no data found
ORA-01403: no data found
ORA-06512: at "SYSTEM.F_NEW", line 11
ORA-06512: at "SYSTEM.TR_TBL_TEST", line 2
ORA-04088: error during execution of trigger 'SYSTEM.TR_TBL_TEST'
ORA-06512: at line 1

То же самое, если делаю так:

create or replace
trigger TR_TBL_TEST after insert-- or update
on TMP_TEST_TABLE
for each row
DECLARE
v_col1 number;
begin
select col1 into v_col1 from TMP_TEST_TABLE;
insert into TMP_TEST_TABLE (COLSUM)
values(f_new1(v_col1));
end TR_TBL_TEST;

Что я делаю не так???
...
Рейтинг: 0 / 0
как вызвать функцию через триггер?
    #39306757
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sonrisa before insertВ это время этой строки ещё нет, чтобы её select-ить.
А потом будешь спрашивать, почему mutating.
В общем, рано в триггера суешься…
...
Рейтинг: 0 / 0
как вызвать функцию через триггер?
    #39306758
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sonrisabefore insertзачем нужна функция, если значение уже есть?
...
Рейтинг: 0 / 0
как вызвать функцию через триггер?
    #39306760
sonrisa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic, может вы, великий умник, скажете тогда как правильно. То, что не правильно я делаю, я знаю.
...
Рейтинг: 0 / 0
как вызвать функцию через триггер?
    #39306762
sonrisa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-, какого значения? нет там значения.
...
Рейтинг: 0 / 0
как вызвать функцию через триггер?
    #39306763
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sonrisaскажете тогда как правильно
Никак. У неправильных задач нет правильных решений.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как вызвать функцию через триггер?
    #39306766
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sonrisa,

Правильно дропнуть COL2. Таблицы с одной колонкой очень удобны и среди них особенно полезны с одной строкой. Кто в оракле не пользуется dualом?! А сколько из него получают замечательных данных...
...
Рейтинг: 0 / 0
как вызвать функцию через триггер?
    #39306767
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sonrisaвеликий умник, скажете тогда как правильно. http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
как вызвать функцию через триггер?
    #39306768
Бельфя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sonrisa,
сформулрируй, задачу, которую ты решаешь, пожалуйста.
...
Рейтинг: 0 / 0
как вызвать функцию через триггер?
    #39306769
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sonrisaкакого значения? нет там значения.
Что и приводит к ошибке "No data found". Что, собственно, и переводится как "нет там
значения".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как вызвать функцию через триггер?
    #39306785
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

No No No, Data Found-таки!
...
Рейтинг: 0 / 0
как вызвать функцию через триггер?
    #39306789
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бельфяsonrisa,
сформулрируй, задачу, которую ты решаешь, пожалуйста.Дама при вставке строки хочет присваивать третьему атрибуту значение второго атрибута.
Но при этом хочет получать это значение лукапом по первому атрибуту из таблицы.
Элик ей все расжевал в первом же ответе, но она оказалась настолько ранима, что пропустила его слова мимо ушей.

Пиши, если еще чего повторно сформулировать надо.
...
Рейтинг: 0 / 0
как вызвать функцию через триггер?
    #39306913
Бельфя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop,
название столбца, в который идет вставка наталкивает на мысль, что там должна быть накопленная сумма.
...
Рейтинг: 0 / 0
как вызвать функцию через триггер?
    #39306920
xenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторназвание столбца, в который идет вставка наталкивает на мысль, что там должна быть накопленная сумма
я бы предположил, что тогда нужен AFTER-TRIGGER
...
Рейтинг: 0 / 0
как вызвать функцию через триггер?
    #39306947
xenixавторназвание столбца, в который идет вставка наталкивает на мысль, что там должна быть накопленная сумма
я бы предположил, что тогда нужен AFTER-TRIGGERосталось нагадать, зачем была "функция" с селектом значения, которое и так в наличии. если предположить межстрочную агрегацию, то эту денормальщину надо рубить где-то раньше, на корню... на том корню, которым зачали архитектора этого чуда.
...
Рейтинг: 0 / 0
как вызвать функцию через триггер?
    #39306994
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xenixавторназвание столбца, в который идет вставка наталкивает на мысль, что там должна быть накопленная сумма
я бы предположил, что тогда нужен AFTER-TRIGGER

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  1  create or replace
  2  trigger TR_TBL_TEST after insert
  3  on TMP_TEST_TABLE
  4  for each row
  5  begin
  6  :new.colsum := :new.col2;
  7* end TR_TBL_TEST;
  8  /
trigger TR_TBL_TEST after insert
        *
ERROR at line 2:
ORA-04084: cannot change NEW values for this trigger type



......
stax
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как вызвать функцию через триггер?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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