2016-02-27 4 views
0

Мне нужно написать триггер, который будет обновлять запись сообщения после его добавления, чтобы обновить, если текст сообщения добавлен 20 слов или дольше. Я продолжаю получать ошибки ORA-06512 и ORA-04088, что очевидно, когда у вас активирован триггер INSERT, и ваш триггер вызывает другой INSERT, создавая бесконечный цикл.Как разрешить цикл в моем триггере SQL?

Но у меня есть ОБНОВЛЕНИЕ в моем триггере, который, как предполагается, срабатывает только в INSERT. Я не могу найти недостаток в своей логике для кода. Есть ли другой, чтобы написать это?

CREATE OR REPLACE TRIGGER Length 
    AFTER INSERT ON Messages 
    FOR EACH ROW 
    WHEN (length(new.msg_text) - length(replace(new.msg_text, ' ', '')) >= 20) 
    BEGIN 
     UPDATE Messages 
     set Messages.length = 1 
     WHERE Messages.msgID = :new.msgID; 
    END; 
/

ответ

0

ли это до вставки:

CREATE OR REPLACE TRIGGER Length 
    BEFORE INSERT ON Messages 
    FOR EACH ROW 
    WHEN (length(:new.msg_text) - length(replace(:new.msg_text, ' ', '')) >= 20) 
    BEGIN 
     :new.length := 1 
    END; 
+0

Я получаю ошибку компиляции, когда триггер создается и после этого, когда триггер срабатывает ORA-04098: триггер «XXXX.LENGTH» неверно и не удалось выполнить повторную проверку – Kaska

+0

Да, есть таблица этого имени. Есть ли альтернативный способ попробовать? – Kaska

+0

Есть ли в сообщениях столбец с именем 'length'? Ваш вопрос, безусловно, предполагает, что это так. - Gordon Linoff –

Смежные вопросы