2011-06-25 113 views
0

我创建了以下存储过程在表panel_user插入行:MySQL的存储过程

CREATE PROCEDURE panel_users() 
BEGIN 
DECLARE i INTEGER; 
DECLARE user_id BIGINT(20); 
DECLARE panel_id BIGINT(20); 
DECLARE wt DECIMAL(10,6); 
DECLARE level DECIMAL(6,2); 
DECLARE total INTEGER; 
SET i=1; 
SELECT COUNT(*) INTO total FROM smartmeter_usage.users_reporting; 
WHILE i<=total DO 
    SELECT u.userId INTO user_id, p.panelId INTO panel_id, ur.usage_percent INTO level, ipr.wt_base INTO wt 
    FROM mondrainusage.user_d u 
    INNER JOIN smartmeter_usage.imei_phone_reporting ipr ON u.imeiNumber = ipr.IMEI 
    INNER JOIN smartmeter_usage.users_reporting ur ON ur.mobile_number = ipr.mobile_number 
    INNER JOIN smartmeter_usage.panel pn ON pn.panel_id = ur.panel_id 
    INNER JOIN mondrainusage.panel p ON p.panelName = pn.panel_name 
    WHERE u.userId = i; 
    INSERT INTO mondrainusage.panel_user (panelId, userId, userWeight, usageLevel) VALUES(panel_id, user_id, wt, level); 
    SET i = i+1; 
END WHILE 
END 

我收到以下错误:

Undeclared variable: p 

我没有得到什么是错在这里我的查询。有没有办法呢?

编辑:

K I得到了上述问题的解决方案。这里是解决方案:

CREATE PROCEDURE panel_users() 
BEGIN 
DECLARE i INTEGER; 
DECLARE user_id BIGINT(20); 
DECLARE panel_id BIGINT(20); 
DECLARE wt DECIMAL(10,6); 
DECLARE level DECIMAL(6,2); 
DECLARE total INTEGER; 
SET i=1; 
SELECT COUNT(*) INTO total FROM smartmeter_usage.users_reporting; 
WHILE i<=total DO 
    SELECT u.userId, p.panelId, ur.usage_percent, ipr.wt_base INTO user_id, panel_id, level, wt 
    FROM mondrainusage.user_d u 
    INNER JOIN smartmeter_usage.imei_phone_reporting ipr ON u.imeiNumber = ipr.IMEI 
    INNER JOIN smartmeter_usage.users_reporting ur ON ur.mobile_number = ipr.mobile_number 
    INNER JOIN smartmeter_usage.panel pn ON pn.panel_id = ur.panel_id 
    INNER JOIN mondrainusage.panel p ON p.panelName = pn.panel_name 
    WHERE u.userId = i; 
    INSERT INTO mondrainusage.panel_user (panelId, userId, userWeight, usageLevel) VALUES(panel_id, user_id, wt, level); 
    SET i = i+1; 
END WHILE 
END 

位现在它给我靠近“END”语法错误在第21行

为什么会这样呢?

编辑:

得到了解决:

END WHILE; 
+0

@ N.B.:我没有找到你? – srahul07

+0

@ srahul07他意味着你从来没有把你的一个问题的答案标记为答案。 –

+0

这意味着您已根据您的个人资料提出了9个问题,并且您没有接受过单个问题的最终答案。 – Jason

回答

0

这里是工作的解决方案。

CREATE PROCEDURE panel_users() 
BEGIN 
DECLARE i INTEGER; 
DECLARE user_id BIGINT(20); 
DECLARE panel_id BIGINT(20); 
DECLARE wt DECIMAL(10,6); 
DECLARE level DECIMAL(6,2); 
DECLARE total INTEGER; 
SET i=1; 
SELECT COUNT(*) INTO total FROM smartmeter_usage.users_reporting; 
WHILE i<=total DO 
    SELECT u.userId, p.panelId, ur.usage_percent, ipr.wt_base INTO user_id, panel_id, level, wt 
    FROM mondrainusage.user_d u 
    INNER JOIN smartmeter_usage.imei_phone_reporting ipr ON u.imeiNumber = ipr.IMEI 
    INNER JOIN smartmeter_usage.users_reporting ur ON ur.mobile_number = ipr.mobile_number 
    INNER JOIN smartmeter_usage.panel pn ON pn.panel_id = ur.panel_id 
    INNER JOIN mondrainusage.panel p ON p.panelName = pn.panel_name 
    WHERE u.userId = i; 
    INSERT INTO mondrainusage.panel_user (panelId, userId, userWeight, usageLevel) VALUES(panel_id, user_id, wt, level); 
    SET i = i+1; 
END WHILE; 
END