IN 구문을 사용하려면 쿼리 전체를 문자열로 만들어서 수행해야한다.
DROP PROCEDURE IF EXISTS ABC.admin_SelectData;
/*
CALL ABC.admin_SelectData('');
*/
DELIMITER //
CREATE PROCEDURE ABC.admin_SelectData(
IN _ids NVARCHAR(256),
IN _types NVARCHAR(128),
IN _beginDateTime DATETIME(3),
IN _endDateTime DATETIME(3)
)
BEGIN
SET @_sql = 'SELECT * FROM ABC.Data WHERE ';
SET @_sql = CONCAT(@_sql, ' rewardDateTime >= \'', _beginDateTime, '\' AND rewardDateTime < \'', _endDateTime, '\'');
SET @_sql = CONCAT(@_sql, ' AND ID IN (', _ids, ')');
IF _types IS NOT NULL THEN
SET @_sql = CONCAT(@_sql, ' AND type IN (', _types, ')');
END IF;
SET @_sql = CONCAT(@_sql, ' GROUP BY userID ORDER BY reward DESC LIMIT 1;');
PREPARE PSQL FROM @_sql;
EXECUTE PSQL;
DEALLOCATE PREPARE PSQL;
END //
DELIMITER ;
위와 같이 CONCAT을 이용해서 쿼리 문자열을 만들고, PREPARE와 EXECUTE를 이용하여 실행시켜주면 된다.
댓글 없음:
댓글 쓰기