mysql存储过程编辑总是出错

huanhuan_hyj 2011-05-24 11:12:49
/*
物品的添加,返回1表示成功,no_mid表示没有月份编号请添加本月计划金额
*/
delimiter $$
DROP PROCEDURE IF EXISTS goods_add;$$

CREATE PROCEDURE goods_add(
goods VARCHAR(40), #物品名称
amount DECIMAL(7,2), #物品价格
atime CHAR(10), #录入时间
remark VARCHAR(40), #备注
paytype TINYINT(2) #物品类型,支出或收入
)
BEGIN
DECLARE `monthID` MEDIUMINT; #月份编号,物品表需要根据此编号做录入
DECLARE `goods_count` INT; #物品录入次数的记录
DECLARE `dayID` MEDIUMINT; #日统计

DECLARE account_time CHAR(10);
SET account_time = DATE_FORMAT(atime,'%Y-%m');

SELECT `mid` INTO monthID FROM month_tongji WHERE DATE_FORMAT(mtime,'%Y-%m') = account_time;
IF monthID IS NOT NULL THEN
#添加物品
INSERT INTO account VALUES(null,goods,amount,DATE(atime),remark,monthID,paytype);

#添加物品记录,首先查询是否有记录
SELECT num_view INTO `goods_count` FROM goods_info WHERE `goods` = goods;
IF goods_count >= 0 THEN
UPDATE goods_info SET `num_view` = goods_count + 1 WHERE `goods` = goods;
ELSEIF goods_count IS NULL THEN
INSERT INTO goods_info VALUES(null,goods,1);
ELSE
UPDATE goods_info SET `num_view` = 1 WHERE `goods` = goods;
END;

#添加日统计,查看日统计是否存在
SELECT `id` INTO dayID FROM day_tongji WHERE `day_time` = DATE(atime);
IF dayID IS NOT NULL THEN
#paytype为1表示支出,2表示收入
IF paytype = 1 THEN
UPDATE day_tongji SET `pay` = `pay` + amount WHERE day_time = DATE(atime);
ELSEIF paytype = 2 THEN
UPDATE day_tongji SET `income` = `income` + amount WHERE day_time = DATE(atime);
END;
ELSE
IF paytype = 1 THEN
INSERT INTO day_tongji VALUES(null,monthID,DATE(atime),amount,0);
ELSEIF paytype = 2 THEN
INSERT INTO day_tongji VALUES(null,monthID,DATE(atime),0,amount);
END;
END;

#添加月统计
IF paytype = 1 THEN
UPDATE month_tongji SET `pay` = `pay` + amount WHERE DATE_FORMAT(mtime,'%Y-%m') = account_time;
ELSEIF paytype = 2 THEN
UPDATE month_tongji SET `income` = `income` + amount WHERE DATE_FORMAT(mtime,'%Y-%m') = account_time;
END;

SELECT 1;
ELSE
SELECT 'no_mid';
END;
END;$$
delimiter ;


这是报错提示:[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';

#添加日统计,查看日统计是否存在
SELECT `id` INTO dayI' at line 29


Mysql版本是:5.0.51b-community-nt-log
...全文
68 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
huanhuan_hyj 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wwwwb 的回复:]

if ... end if
[/Quote]

唉,通过了,,自己怎么就那么不小心呢
wwwwb 2011-05-24
  • 打赏
  • 举报
回复
if ... end if
huanhuan_hyj 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wwwwb 的回复:]

DELIMITER $$
DROP PROCEDURE IF EXISTS goods_add;$$

CREATE PROCEDURE goods_add(
goods VARCHAR(40), #物品名称
amount DECIMAL(7,2), ……
[/Quote]

呵呵,这样我不知道哪里有变动哇
wwwwb 2011-05-24
  • 打赏
  • 举报
回复
DELIMITER $$
DROP PROCEDURE IF EXISTS goods_add;$$

CREATE PROCEDURE goods_add(
goods VARCHAR(40), #物品名称
amount DECIMAL(7,2), #物品价格
atime CHAR(10), #录入时间
remark VARCHAR(40), #备注
paytype TINYINT(2) #物品类型,支出或收入
)
BEGIN
DECLARE `monthID` MEDIUMINT; #月份编号,物品表需要根据此编号做录入
DECLARE `goods_count` INT; #物品录入次数的记录
DECLARE `dayID` MEDIUMINT; #日统计

DECLARE account_time CHAR(10);
SET account_time = DATE_FORMAT(atime,'%Y-%m');

SELECT `mid` INTO monthID FROM month_tongji WHERE DATE_FORMAT(mtime,'%Y-%m') = account_time;
IF monthID IS NOT NULL THEN
-- #添加物品
INSERT INTO account VALUES(NULL,goods,amount,DATE(atime),remark,monthID,paytype);

-- #添加物品记录,首先查询是否有记录
SELECT num_view INTO `goods_count` FROM goods_info WHERE `goods` = goods;
IF goods_count >= 0 THEN
UPDATE goods_info SET `num_view` = goods_count + 1 WHERE `goods` = goods;
ELSEIF goods_count IS NULL THEN
INSERT INTO goods_info VALUES(NULL,goods,1);
ELSE
UPDATE goods_info SET `num_view` = 1 WHERE `goods` = goods;
END IF;

#添加日统计,查看日统计是否存在
SELECT `id` INTO dayID FROM day_tongji WHERE `day_time` = DATE(atime);
IF dayID IS NOT NULL THEN
#paytype为1表示支出,2表示收入
IF paytype = 1 THEN
UPDATE day_tongji SET `pay` = `pay` + amount WHERE day_time = DATE(atime);
ELSEIF paytype = 2 THEN
UPDATE day_tongji SET `income` = `income` + amount WHERE day_time = DATE(atime);
END IF;
ELSE
IF paytype = 1 THEN
INSERT INTO day_tongji VALUES(NULL,monthID,DATE(atime),amount,0);
ELSEIF paytype = 2 THEN
INSERT INTO day_tongji VALUES(NULL,monthID,DATE(atime),0,amount);
END IF;
END IF;

#添加月统计
IF paytype = 1 THEN
UPDATE month_tongji SET `pay` = `pay` + amount WHERE DATE_FORMAT(mtime,'%Y-%m') = account_time;
ELSEIF paytype = 2 THEN
UPDATE month_tongji SET `income` = `income` + amount WHERE DATE_FORMAT(mtime,'%Y-%m') = account_time;
END IF;

SELECT 1;
ELSE
SELECT 'no_mid';
END IF;
END;$$
DELIMITER ;

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧