2012-08-13 3 views
0

나는 윈도우 7에서 MySQL의 저장 프로 시저를 만들었습니다. Windows에서 성공적으로 실행됩니다. 하지만 우분투로 전환하면 저장 프로 시저에 오류가 발생합니다. Windows에서 저장 프로 시저를 생성하기 위해 SQLyog을 사용하고 있습니다. 우분투에서 SQL 스크립트를 실행하고 저장 프로 시저를 호출하지만 오류가 발생합니다. 아래 내 저장 프로 시저입니다.우분투에서 MySQL의 저장 프로 시저

DELIMITER $$ 

USE `adserver`$$ 

DROP PROCEDURE IF EXISTS `getDaypartTimeDetail`$$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `getDaypartTimeDetail` 
(currentDate DATE,noOfdays INT,cityId BIGINT) 
BEGIN 

DECLARE i INT; 
DECLARE dateCnt INT; 
SET dateCnt = 0; 

DROP TEMPORARY TABLE IF EXISTS OnlyDate; 
DROP TEMPORARY TABLE IF EXISTS AdvScheduleData; 
CREATE TEMPORARY TABLE OnlyDate(dday DATE); 
CREATE TEMPORARY TABLE AdvScheduleData(dday BIGINT,daypartId INT,totalFile BIGINT,totalDur BIGINT); 

/* Generate Dates */ 
WHILE(dateCnt < noOfdays) DO 
    SET i = 1; 
    INSERT INTO OnlyDate(dday) VALUES (DATE_ADD(currentDate, INTERVAL dateCnt DAY)); 
SET dateCnt = dateCnt + 1; 
END WHILE; 

/* Insert all dayparts for all dates */ 
INSERT INTO AdvScheduleData (dday, daypartID) SELECT (UNIX_TIMESTAMP(dday)*1000), id FROM OnlyDate, daypart; 
/* Update total files and duration */  
UPDATE AdvScheduleData SET 
    TotalFile = (SELECT COUNT(advt_id) 
      FROM adv_schedule AdvSch 
      INNER JOIN advertisement Adv ON Adv.id = AdvSch.advt_id 
       WHERE AdvScheduleData.dday BETWEEN AdvSch.start_date AND AdvSch.end_date 
       AND AdvSch.status = 2 
       AND AdvSch.active = 1 
       AND AdvSch.id IN (SELECT schedule_id FROM schedule_daypart 
       WHERE daypart_id = AdvScheduleData.daypartId) 
       AND AdvSch.id IN (SELECT schedule_id FROM schedule_cities WHERE city_id = cityId) 
       AND Adv.is_active = 1 
       AND Adv.is_deleted = 0 
       AND Adv.status = 2 
       AND Adv.expiry_date >= AdvScheduleData.dday), 
    totalDur = (SELECT SUM(Adv.duration) 
      FROM adv_schedule AdvSch 
      INNER JOIN advertisement Adv ON Adv.id = ADVSCH.advt_id 
       WHERE AdvScheduleData.dday BETWEEN AdvSch.start_date AND AdvSch.end_date 
       AND AdvSch.status = 2 
       AND AdvSch.active = 1 
       AND AdvSch.id IN (SELECT schedule_id FROM schedule_daypart 
       WHERE daypart_id = AdvScheduleData.daypartId) 
       AND AdvSch.id IN (SELECT schedule_id FROM schedule_cities WHERE city_id = cityId) 
       AND Adv.is_active = 1 
       AND Adv.is_deleted = 0 
       AND Adv.status = 2 
       AND Adv.expiry_date >= AdvScheduleData.dday); 
SELECT * FROM AdvScheduleData; 
END$$ 

DELIMITER ; 

내가 우분투에서 얻을 출력은

mysql> call getDaypartTimeDetail('2012-08-13',5,30534); ERROR 1054 (42S22): Unknown column 'ADVSCH.advt_id' in 'on clause'

+0

에하는 소리. "desc adserver.adv_schedule;"의 출력을 붙여 넣을 수 있습니까? 둘 다요? – Kadaan

+0

동일한 데이터베이스에 연결되어 있고 동일한 테이블을 쿼리하고 있습니까? –

+0

네, 같은 데이터베이스를 사용하고 있습니다.이 절차는 Windows에서 완벽하게 실행됩니다. 올바른 결과를 제공합니다. 창에 오류가 없습니다. – vishal

답변

1

테이블 이름과 별명은 우분투에서 대소 문자를 구분합니다.

따라서,이 참조가 오류를주고 다음 adv_schedule의 표는 두 개의 인스턴스에 다른처럼

totalDur = (SELECT SUM(Adv.duration) 
     FROM adv_schedule AdvSch 
     INNER JOIN advertisement Adv ON Adv.id = ADVSCH.advt_id 

변경에게 그것을 AdvSch.advt_id

+0

답변 해 주셔서 감사합니다. – vishal