2013-12-19 50 views
1

我想调用另一个存储过程 - 使用if语句。 我得到一个错误,所以我相信,我有一些失序一个存储过程调用另一个 - 但是得到一个表错误

CREATE PROCEDURE reportFreeCoolingTrackerCalls (
     IN fromDate varchar (50), 
     IN toDate varchar (50), 
     IN timeZone varchar (50)) 

    BEGIN 
      DECLARE startDate varchar (50); 
      DECLARE endDate varchar (50); 
      DECLARE mylogID Int; 

      SET startDate = FROM_UNIXTIME(fromDate/1000); 
      SET endDate = FROM_UNIXTIME(toDate/1000); 

    IF (l1.activityId = t2.activityId) 
     THEN CALL reportFreeCoolingTrackerError (
     fromDate, 
     toDate, 
     timeZone); 
    ELSEIF (l1.activityId != t2.activityId) 
     THEN CALL reportFreeCoolingTracker (
     fromDate, 
     toDate, 
     timeZone); 
      END IF; 


    SELECT l1.activityId,t2.activityId 
    FROM logs l 
     INNER JOIN groups g ON g.groupId = l.groupId 
     LEFT JOIN groups g1 ON g.parentId = g1.groupId 
     LEFT JOIN groups g2 ON g1.parentId = g2.groupId 
     LEFT JOIN groups g3 ON g2.parentId = g3.groupId     
     INNER JOIN activities a ON l.logId = a.logId 
     INNER JOIN log1644 l1 ON a.activityId = l1.activityId 
     INNER JOIN log1644 t2 ON t2.recordId = l1.recordid + 1 
     INNER JOIN items i ON l.logId = i.logId AND i.name LIKE '%KW%' 
     INNER JOIN users u ON l1.userId = u.userId AND i.name LIKE '%KW%' 
    WHERE i.itemID = "31985" AND l1.activityId = 1257 
     AND l1.started 
     BETWEEN startDate 
      AND endDate 
    ORDER BY l1.recordId,l1.started; 

    END // 

DELIMITER ; 

ERROR

未知表中的字段列表“L1”

回答

0

表的别名(如INNER JOIN log1644 l1 ON...仅在声明中可见(在你的情况下,SELECT),其中包含他们。

你需要参考完整的表名以外select。

至于逻辑....你需要在SP调用中使用select来填充需要的值,并将它们填充到变量中。或者,在调用中使用select子查询,但这将是一个维护头痛!

2

我觉得这个代码是造成麻烦你:

IF (l1.activityId = t2.activityId) --Here l1 and t2 are not known 
    THEN CALL reportFreeCoolingTrackerError (
    fromDate, 
    toDate, 
    timeZone); 
ELSEIF (l1.activityId != t2.activityId) --Here l1 and t2 are not known 
    THEN CALL reportFreeCoolingTracker (
    fromDate, 
    toDate, 
    timeZone); 
     END IF; 

如同在这一行l1是未知的。同样T2也不得而知

相关问题