一个存储过程调用另一个 - 但是会出现表错误

时间:2013-12-19 19:09:55

标签: mysql

我试图使用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'

2 个答案:

答案 0 :(得分: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也是未知的

答案 1 :(得分:0)

表别名(例如INNER JOIN log1644 l1 ON...仅在包含它们的语句(在您的情况下为SELECT)中可见。

您需要在该选择之外引用完整的表名。

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