/*
物品的添加,返回1表示成功,no_mid表示没有月份编号请添加本月计划金额
*/
delimiter $$
DROP PROCEDURE IF EXISTS goods_add;$$CREATE PROCEDURE goods_add(
goods VARCHAR(40), #物品名称
amount DECIMAL(7,2), #物品价格
atime CHAR(10), #录入时间
re 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),re,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

解决方案 »

  1.   

    DELIMITER $$
    DROP PROCEDURE IF EXISTS goods_add;$$CREATE PROCEDURE goods_add(
        goods VARCHAR(40),                                    #物品名称
        amount DECIMAL(7,2),                                #物品价格
        atime CHAR(10),                                            #录入时间
        re 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),re,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 ;