2011-12-18 2 views
7

입력 변수를 기반으로 MySQL 저장 프로 시저 내에서 쿼리 문자열을 변경하는 것이 목표입니다. 이런Mysql은 로직을 기반으로 저장 프로 시저에서 쿼리 문자열을 동적으로 작성합니다.

예시 :

CREATE DEFINER=`root`@`localhost` PROCEDURE `func`(type VARCHAR(15)) 
BEGIN 
    SET @type = type; 

    -- Check for the sort parameter 
    if @type="asc" THEN 
     SET @sort = " order by name asc"; 
    elseif @type="desc" THEN 
     SET @sort = " order by name desc"; 
    else 
     SET @sort =""; 
    end if; 

SELECT id, name from table @sort; 

END  
+1

용액 실행 사용하고, CONCAT : 은 DEFINER ='root'을 만들 @ 'localhost' PROCEDURE'test' (입력 VARCHAR (15)) BEGIN SET @input = input; if @ input = "asc"then SET @sort = "ActivityLogKey 오름차순 정렬"; elseif @input = "desc"then SET @sort = "순서대로 ActivityLogKey 내림차순"; else SET @sort = ""; end if; SET @query = CONCAT ('select * from activitylog', @ sort, 'limit 0, 5'); PREPARE stmt FROM @query; EXECUTE stmt; DEALLOCATE PREPARE stmt; end –

+0

이것이 해결책이 아닌 이유를 답으로 추가하고 동의하거나 질문을 편집 한 이유입니다. –

+0

100 평판이 없으면 내 질문에 대답하기 위해 8 시간을 기다려야합니다. –

답변

13

용액 실행 사용하고, CONCAT :

CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(input VARCHAR(15)) 
BEGIN 
SET @input = input; 

if @input="asc" then 
    SET @sort = " order by ActivityLogKey asc"; 
elseif @input = "desc" then 
    SET @sort = " order by ActivityLogKey desc"; 
else 
    SET @sort =""; 
end if; 

SET @query = CONCAT('select * from activitylog ',@sort,' limit 0, 5'); 

PREPARE stmt FROM @query; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

END 
+0

내가 찾은 유용성은 조건부로 조인, 필드 또는 다른 모든 SQL 코드를 PHP 대신 저장 프로 시저의 일부로 삽입 할 수 있다는 것입니다. 저장된 proc 수준에서이를 구현하는 것이 훨씬 더 깨끗해 보입니다. –

관련 문제