2017-02-07 5 views
-1

끝 부분 앞에 줄로 표시된 선택을 수행하는 저장 프로 시저를 만들려고합니다. 그것은 내 usertable에서 가장 빠른 StartDate 및 최신 EndDate 걸릴 내 기준 달력 테이블에서 해당 날짜 사이의 모든 일을 선택합니다. 불행히도 내가 사용하려고 시도 할 구문은 무엇이든 항상 usertable의 값을 start/endday 변수에 할당 할 때 오류 메시지가 표시됩니다. 나는 다음과 같은 예제를 통해 올바른 구문을 지정하는 많은 리소스를 찾지 못했습니다.mysql - 질의 결과에서 로컬 변수 (스토어드 프로 시저에서) 초기화

DELIMITER $$ 
CREATE PROCEDURE seldays() 

BEGIN 

DECLARE startday DATE; 
SET startday = (SELECT MIN(StartDate) from user1table1); 
DECLARE endday DATE; 
SET endday = (SELECT MAX(EndDate) from user1table1); 
SELECT calendar_date FROM calendar WHERE calendar_date >= startday AND calendar_date< endday; 

END $$ 
DELIMITER ; 

나는 또한 아무 소용이 thusly 히

SELECT MIN(StartDate) from user1table1 INTO endday; 

을 값을 할당했습니다. 이러한 변수를 저장하지 않고 절차를 작동하게 만들 수도 있지만, 조만간 사용해야 할 것입니다. 그래서 로컬 변수를 Mysql의 쿼리 결과로 올바르게 채우는 방법은 무엇입니까?

+1

왜 단순한 '달력 C로부터 SELECT calendar_date (MIN (STARTDATE) mindate을 선택한 MAX (STARTDATE) maxdate에서 user1table1) 여기서 U c.calendar_date> = u.mindate 및 c.calendar_date <= U .maxdate)'? 왜 간단한 선택 대신 절차? –

+1

변수를 선언해야합니다. –

+0

감사합니다. Ankit Agrawal 내가 놓친 그런 간단한 일이었습니다. –

답변

0
SELECT MIN(StartDate) into startday from user1table1 
0

MySQL의에서 당신은 select ... into <variable list> from ...statement 할당 결과 변수를 사용할 수 있습니다 :

select min(StartDate) into startday from user1table1; 
select max(EndDate) into endday from user1table1; 
+0

흠은 여전히 ​​오류를 시도했습니다. 오류 1064 (42000) : SQL 구문에 오류가 있습니다. DECLARE endday DATE 근처에서 사용할 올바른 구문을 보려면 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. –

+3

오류 메시지는 변수에 값을 할당하는 것과 관련이 없으므로 전체 질문을 오해의 소지가 있습니다. – Shadow

+1

두 번째 신고는 앞쪽으로 옮겨야합니다. 모든 신고는 다른 진술보다 먼저 나와야합니다. – Shadow

1

내가 단일 쿼리에서 이렇게 단지 것이다. 변수를 왜 귀찮게합니까? 주석 에

SELECT c.calendar_date 
FROM calendar c JOIN 
    (SELECT MIN(StartDate) as startday, MAX(EndDate) as endday 
     FROM user1table1 
    ) u 
    ON c.calendar_date >= u.startday AND c.calendar_date < u.endday; 
+0

작동 할 수는 있지만 그럼에도 불구하고 언젠가 일부 쿼리 결과를 로컬 변수에 저장하는 방법이 필요할 수도 있으며 지금 당장은 작동하지 않는 것으로 보입니다. –

0

덕분에 나는 대답이 일을 결론 지을 수

.. ANKIT 아그라 왈으로 "변수가 상단에 있어야 선언합니다." 이 게시물을 올바른 답으로 게시하십시오. 누구나 똑같은 문제가 있으면 빨리 볼 수 있습니다.

DECLARE는 BEGIN ... END 복합 명령문 내에서만 사용할 수 있으며 다른 명령문보다 먼저 시작해야합니다.

DELIMITER $$ 
CREATE PROCEDURE seldays() 

BEGIN 

DECLARE startday DATE; 
DECLARE endday DATE; 
SELECT MIN(StartDate) INTO startday FROM user1table1; 
SELECT MAX(EndDate) INTO endday FROM user1table1; 
SELECT calendar_date FROM calendar WHERE calendar_date >= startday AND calendar_date< endday; 

END $$ 
DELIMITER ;