Проблеми със SQL Trigger преди вмъкване

Бих искал да създам тригер, за да мога да контролирам отрицателните стойности.

Първо се опитах...

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