SQL / Oracle 10g - проблемы с триггерами / получение значений из таблицы - PullRequest
0 голосов
/ 26 октября 2011

У меня сейчас проблема с триггером, который я пишу. Я хочу сделать простой триггер, в котором после обновления таблицы STATEMENT с полем состояния, установленным на «Отправлено», он создаст новую строку в таблице NOTICE с такими полями, как id, date, user и последнее поле, являющееся сообщение, которое принимает определенные значения поля для создания «уведомления».

Если это поможет, моя таблица STATEMENT содержит следующие поля:

  • id
  • Элемент списка
  • Название
  • Другие не должны знать

Итак, с последним вставленным последним полем УВЕДОМЛЕНИЯ я хочу создать подобное сообщение, возможно, с сообщением «Выражение (id) - (title), выпущенное (date), было отправлено».

В данный момент у меня есть:

create trigger send_notice
    after update on STATEMENT
    for each row
    when (new.status = 'Sent')
begin
    insert into NOTICE values (notice_seq.nextval, SYSDATE, '10001', 'the notice 
    im having trouble constructing');
end send_notice;

Я протестировал этот триггер в базе данных, и все, кажется, работает нормально. Еще одна вещь, которую мне просто интересно, если форматирование или что-то не хватает, что может помочь с этим триггером? А также, я бы хотел создать это уведомление, которое принимает значения полей из STATEMENT?

Любая помощь приветствуется

1 Ответ

3 голосов
/ 26 октября 2011

Вы можете ссылаться на новые значения столбца STATEMENT в триггере, используя: new., И объединять их в свой текст:

create trigger send_notice
    after update on STATEMENT
    for each row
    when (new.status = 'Sent')
begin
    insert into NOTICE values (notice_seq.nextval, SYSDATE, '10001',
     'The statement, ' || :new.id || ' - ' || :new.title || ', issued on '
     || :new.issue_date || ' has been sent');
end send_notice;

Иногда объединение большого количества текста и значений может привести к путанице, и вам может оказаться проще использовать этот «шаблонный» подход:

create trigger send_notice
    after update on STATEMENT
    for each row
    when (new.status = 'Sent')
declare
    l_text varchar2(500);
begin
    l_text := 'The statement, #ID# - #TITLE#, issued on #DATE# has been sent';
    l_text := replace (l_text, '#ID#', :new.id);
    l_text := replace (l_text, '#TITLE#', :new.title);
    l_text := replace (l_text, '#DATE#', :new.issue_date);
    insert into NOTICE values (notice_seq.nextval, SYSDATE, '10001', l_text);
end send_notice;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...