2013-01-30 3 views
1

Итак, у меня есть функция, которая задает идентификатор пользователя, вычисляет его bmi (индекс массы тела) на основе его последнего измерения веса (у меня есть таблица, в которой записаны все измерения), и я хочу закодируйте триггер, который каждый раз, когда пользователь вставляет свой вес, триггеры проверяют, находится ли пользователь bmi ниже предела. Функция нормально, но я не могу получить триггер работать, вот что у меня есть:Вызов функции внутри триггера в PL/SQL

1 CREATE OR REPLACE 
2 TRIGGER BMITG 
3 AFTER INSERT ON WEIGHTS 
4 BEGIN 
5  IF BMI(USRID)>25 
6  THEN raise_application_error(-20001,'Please control your weight.'); 
7  END IF; 
8 END; 

Но я получаю ошибки: Error (6,3): PL/SQL: Заявление игнорировали Error (6,10): PLS-00201: идентификатор IDENT должен быть объявлен

Я думаю, проблема в том, что db не знает, что USRID является идентификатором пользователя INSERT, который активирует триггер. Как я могу решить эту проблему? BTW таблица WEIGHTS имеет идентификатор пользователя (номер), дату и вес (число).

С уважением

ответ

1

Попробуйте использовать :new.id вместо USRID и добавить FOR EACH ROW.

+0

Спасибо, триггер в настоящее время составляет, но я получаю «ORA-04091: имя таблицы мутирует, триггер/функция может не увидеть» при установке на столе – danielnovais92

+1

@DanielNovais - Внутри запуска вы не можете 'select' из таблицу, на которой создан ваш триггер. Используйте ': new.column_name' для чтения данных из столбца' column_name' вставки строки. –

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