这个应该怎么修改呢。。
%%sql
CREATE TRIGGER UPDATE_MY_STOCK
AFTER INSERT ON trans
FOR EACH ROW
BEGIN
DECLARE SELL_OR_BUY INT;
DECLARE STOCK_ID INT;
DECLARE PRICE FLOAT;
DECLARE AMOUNT INT;
DECLARE AMOUNT_MY INT;
SELECT STOCK_ID = stock_id FROM inserted;
SELECT SELL_OR_BUY = sell_or_buy FROM inserted;
SELECT PRICE = price FROM inserted;
SELECT AMOUNT = amount FROM inserted;
SELECT AMOUNT_MY = volume FROM my_stock WHERE stock_id = STOCK_ID;
IF SELL_OR_BUY = 1 THEN
IF NOT EXISTS (SELECT * FROM my_stock) THEN
INSERT INTO my_stock(volume, avg_price, profit) VALUES (1, @PRICE, 0);
ELSE
BEGIN
UPDATE a INNER JOIN b ON a.stock_id = b.stock_id SET valume = a.valume+1;
UPDATE a INNER JOIN b ON a.stock_id = b.stock_id SET avg_price = (avg_price * volume + b.amount * b.price) / a.volume;
END;
END IF;
ELSEIF SELL_OR_BUY = 0 THEN
IF AMOUNT > AMOUNT_MY THEN
ROLLBACK;
ELSE
BEGIN
UPDATE a INNER JOIN b ON a.stock_id = b.stock_id SET valume = a.valume-1;
UPDATE a INNER JOIN b ON a.stock_id = b.stock_id SET avg_price = (avg_price * volume - b.amount * b.price) / a.volume;
END;
END IF;
END IF;
END
MYSQL5以后,不允许触发器返回任何结果,因此使用into @变量名,将结果赋值到变量中,用select调用即可。
参考:
https://www.cnblogs.com/shiheyuanfang/p/13668073.html#:~:text=%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AFNot%20allowed%20to%20return%20a%20result,set%20from%20a%20trigger%20%E6%9F%A5%E6%89%BE%E5%8E%9F%E5%9B%A0%E6%98%AF%EF%BC%9AMYSQL5%E4%BB%A5%E5%90%8E%EF%BC%8C%E4%B8%8D%E5%85%81%E8%AE%B8%E8%A7%A6%E5%8F%91%E5%99%A8%E8%BF%94%E5%9B%9E%E4%BB%BB%E4%BD%95%E7%BB%93%E6%9E%9C%EF%BC%8C%E5%9B%A0%E6%AD%A4%E4%BD%BF%E7%94%A8into%20%40%E5%8F%98%E9%87%8F%E5%90%8D%EF%BC%8C%E5%B0%86%E7%BB%93%E6%9E%9C%E8%B5%8B%E5%80%BC%E5%88%B0%E5%8F%98%E9%87%8F%E4%B8%AD%EF%BC%8C%E7%94%A8select%E8%B0%83%E7%94%A8%E5%8D%B3%E5%8F%AF
直接用下面的代码
CREATE TRIGGER UPDATE_MY_STOCK
AFTER INSERT ON trans
FOR EACH ROW
BEGIN
DECLARE Ver_SELL_OR_BUY INT;
DECLARE Ver_STOCK_ID INT;
DECLARE Ver_PRICE FLOAT;
DECLARE Ver_AMOUNT INT;
DECLARE Ver_AMOUNT_MY INT;
SELECT stock_id,sell_or_buy,price,amount into Ver_STOCK_ID,Ver_SELL_OR_BUY, Ver_PRICE,Ver_AMOUNT FROM inserted;
SELECT volume into Ver_AMOUNT_MY FROM my_stock WHERE stock_id = STOCK_ID;
IF Ver_SELL_OR_BUY = 1 THEN
IF NOT EXISTS (SELECT * FROM my_stock) THEN
INSERT INTO my_stock(volume, avg_price, profit) VALUES (1, @Ver_PRICE, 0);
ELSE
BEGIN
UPDATE a INNER JOIN b ON a.stock_id = b.stock_id SET valume = a.valume+1;
UPDATE a INNER JOIN b ON a.stock_id = b.stock_id SET avg_price = (avg_price * volume + b.amount * b.price) / a.volume;
END;
END IF;
ELSEIF Ver_SELL_OR_BUY = 0 THEN
IF Ver_AMOUNT > Ver_AMOUNT_MY THEN
ELSE
BEGIN
UPDATE a INNER JOIN b ON a.stock_id = b.stock_id SET valume = a.valume-1;
UPDATE a INNER JOIN b ON a.stock_id = b.stock_id SET avg_price = (avg_price * volume - b.amount * b.price) / a.volume;
END;
END IF;
END IF;