Проблемы с триггером SQL перед вставкой

Я хотел бы создать триггер, чтобы я мог контролировать отрицательные значения.

Сначала я пытался...

CREATE TRIGGER POS_PROD
BEFORE INSERT
ON PRODUCTS
FOR EACH ROW
BEGIN
IF stock <0 OR price <0
THEN
RESIGNAL SET MESSAGE_TEXT = 'Please insert a positive value';
END IF;
END

Проблема в том, что когда я пытаюсь вставить значения, я получаю сообщение об ошибке «Цена — неизвестное поле». Тогда я решил попробовать это...

CREATE TRIGGER POS_PROD
AFTER INSERT
ON PRODUCTS
FOR EACH ROW
BEGIN
IF stock <0 OR price <0
THEN
RESIGNAL SET MESSAGE_TEXT = 'Please insert a positive value';
ROLLBACK;
END IF;
END

Но я получил эту ошибку... Явная или неявная фиксация не разрешена в хранимой функции или триггере».

Большое спасибо.


person john smih    schedule 29.04.2014    source источник


Ответы (1)


Попробуй это

CREATE TRIGGER POS_PROD
BEFORE INSERT
ON PRODUCTS
FOR EACH ROW
BEGIN
IF NEW.stock <0 OR NEW.price <0
THEN
SIGNAL SQLSTATE '45000'
            SET MESSAGE_TEXT = 'Please insert a positive value';
END IF;
END;


INSERT INTO PRODUCTS values (10,20);
INSERT INTO PRODUCTS values (10,-20);

вы должны использовать NEW для ссылки на значения, полученные из оператора INSERT.

SQL FIDDLE

person Ilesh Patel    schedule 29.04.2014
comment
Всегда пожалуйста. Кроме того, когда вы получаете то, что хотите, чем принять это ответ. чтобы он стал на вершине, и другие могли использовать его в будущем. - person Ilesh Patel; 29.04.2014