我正在编写一个sqlyog函数,根据客户花费的金额来查找客户的状态。他们花费的金额位于payment表中,所有客户的详细信息都位于clients表中。
编辑:注意,当输出只是 CustStatus
,似乎问题与包含其他返回值有关。
这是我收到的错误:
错误代码:1064您的sql语法有错误;查看与您的mysql服务器版本相对应的手册,了解使用varchar(50)、varchar(50)、varchar(10)的正确语法
从第2行开始声明k1 int(11'
DROP FUNCTION IF EXISTS DTC_VIP_members $$
CREATE FUNCTION DTC_VIP_members (v1 INT(11))
RETURNS INT(11), VARCHAR(50), VARCHAR(50), VARCHAR(10) DETERMINISTIC
BEGIN
DECLARE k1 INT(11);
DECLARE CustStatus VARCHAR(10);
SELECT SUM(payment.SaleAmt) INTO k1
FROM payment
INNER JOIN clients
ON payment.client_id = clients.client_id
WHERE payment.client_id = v1;
IF k1 >= 300 THEN
UPDATE clients
SET clients.CustStatus = 'VIP';
ELSE
UPDATE clients
SET clients.CustStatus = 'Non-VIP';
END IF;
RETURN clients.client_id, clients.first_name, clients.last_name, clients.CustStatus;
END $$
DELIMITER ;
2条答案
按热度按时间xcitsw881#
抱歉,你的方法看起来不对。
第一:我建议使用存储过程代替函数
第二:使用
UPDATE
无条件声明WHERE
条件导致更新表中似乎也错误的所有行。因此,存储过程可以如下所示:
ccgok5k52#
解决了的!感谢您抽出时间查看并回复斯拉瓦语!是的,你的方法是一个更好的设计,可能会我所有愚蠢的sql语法错误。我了解到,对于我正在使用的sqlyog服务器版本,函数只能返回一个值。所以我的设计从一开始就有缺陷。
因为sqlyog函数只能返回单个值“vip”或“non-vip”。我试着用一个select来达到预期的效果。选择名字、姓氏…。dtc成员(…);
希望这个答案能帮助其他试图从sqlyog的免费版本学习sql的初学者。向左上