2014-12-15 6 views
0

테이블에서 count 값을 가져 와서 저장 프로 시저의 select 문을 사용하여 변수에 저장하려고합니다. 내가 저장 프로 시저select 쿼리에서 변수 사용하기

를 호출에 오류가 다음 얻을

DECLARE totalRegister INTEGER; 
SET @sqlstmt = CONCAT('SELECT COUNT(DISTINCT(msisdn)) INTO ', totalRegister, ' FROM sm_history.svc_mgmt_', @yesterdayMonth,' WHERE action_type = 1 AND DATE(created) = ', yesterday); 

PREPARE statement FROM @sqlstmt; 
EXECUTE statement; 
DEALLOCATE PREPARE statement; 

statemnts의 다음 줄을 사용할 때 당신은 당신의 SQL 구문에 오류가 있습니다; 라인 1에서 'NULL'근처에서 사용할 올바른 구문에 대한 MySQL 서버 버전의 매뉴얼 확인

을 사용하여 저장 프로 시저를 디버깅했습니다. @sql을 선택하십시오.하고 NULL

편집 한 반환 된보고 놀랐 : 어제 yesterdayDate 값을 반환하는 변수를 올바르게 그래서 이러한 변수와 아무 문제가 없습니다 확신합니다. 문제는 totalRegister 변수로 인한 것입니다.

+0

어제는 오류입니까? – Mailkov

+0

어디에서'totalRegister','@ yesterdayMonth' 및'yesterday' 변수 값이 올까요? 그들 중 누구도 null이 아니라고 확신합니까? –

+0

이러한 변수 값을 모두 확인하십시오. 그 중 하나는 null이어야합니다. –

답변

0

운 좋게도 나는 hit과 trial을 사용하여 해결책을 얻었습니다. CONCAT 함수에서 totalRegister를 변수로 사용하는 대신 @totalRegister로 바꾸기 때문에 저장 프로 시저가 올바르게 작동합니다.

DECLARE totalRegister INTEGER; 
SET @sqlstmt = CONCAT('SELECT COUNT(DISTINCT(msisdn)) INTO @totalRegister FROM sm_history.svc_mgmt_',@yesterdayMonth ,' WHERE action_type = 1 AND DATE(created) = ', "'", yesterday, "'"); 
PREPARE statement FROM @sqlstmt; 
EXECUTE statement; 
DEALLOCATE PREPARE statement; 
select @totalRegister; 

위의 사항이 정상적으로 작동했습니다. 어쨌든 기여 덕분에 모두에게

관련 문제