#sql #postgresql #triggers
#sql #postgresql #триггеры
Вопрос:
Добрый день,
У меня возникли проблемы с моим запросом, так как я не могу понять, почему я продолжаю получать ошибку «синтаксическая ошибка на уровне или около»КАК » вот мой запрос:
CREATE TRIGGER updateAvailableQuantity
AFTER INSERT ON sale_item FOR EACH ROW
AS $$
BEGIN
IF NEW.quantity > 0 THEN
UPDATE products
SET products.quantity_instock = products.quantity_instock - NEW.quantity WHERE barcode = NEW.barcode;
END IF;
END;
$$ LANGUAGE plpgsql;
ошибка, которую я продолжаю получать, это,
ERROR: syntax error at or near "AS"
LINE 4: AS $$
^
SQL state: 42601
Character: 100
Ответ №1:
Вы не можете написать триггер в PostgreSQL таким образом. Здесь это двухэтапный процесс.
- Сначала создайте триггерную функцию:
CREATE OR REPLACE FUNCTION updateAvailableQuantity()
RETURNS TRIGGER
AS
$$
BEGIN
IF NEW.quantity > 0 THEN
UPDATE products
SET quantity_instock = quantity_instock - NEW.quantity WHERE products.barcode = NEW.barcode;
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
- Затем напишите триггер в своей таблице для вызова функции, как показано ниже:
CREATE TRIGGER trg_updateAvailableQuantity
AFTER INSERT ON sale_item
FOR EACH ROW
EXECUTE PROCEDURE updateAvailableQuantity();
Комментарии:
1. Спасибо! Наконец, это сработало. Я был в полной загадке, почему это не работает, и в mysql workbench все работает нормально.
Ответ №2:
У вас ошибка в вашем синтаксисе. Смотрите страницу документации на create trigger
.
FOR EACH ROW
невозможно перейти REFERENCING AS
к оператору before.
В документации также есть множество примеров.