320x100
서버에서 SP를 호출하며 조건을 임의로 파라미터로 보내주려고 하던 와중에 필요한 것이 동적 쿼리였다.
예를 들면 character 테이블에서 class가 1,2,4인 것을 찾아야 하는 내용을 만들어야 하는데 1,2,4가 고정이 아니라 서버에서 임의로 변경이 가능한 조건이다.
그래서 sp내에 쿼리와 파라미터로 온 조건을 문자열로 합쳐 최종 쿼리를 완성하고 실행 시켜야 하는데 동적쿼리가 필요했다.
내용은 대략 다음과 같다.
DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_name` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_name`(
IN `_uid` BIGINT UNSIGNED
, IN `_type` VARCHAR(255)
)
BEGIN
SET @v_uid = _uid;
SET @v_type = _type;
SET @v_query = 'UPDATE
a
JOIN
b
ON
a.idx = b.idx
SET
a.value = 0
WHERE
a.uid = ? AND
FIND_IN_SET(b.type, ?)';
PREPARE stmt FROM @v_query;
EXECUTE stmt USING @v_uid, @v_type;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
@v_condition은 sp의 파라미터로 대체될 내용이다. 조건과 기본 쿼리문을 작성해놓고 동적으로 prepare 시켜 실행하는 내용이다.
https://stackoverflow.com/questions/999200/is-it-possible-to-execute-a-string-in-mysql
https://m.blog.naver.com/adolkristin/220723191724
320x100
'DB > MYSQL' 카테고리의 다른 글
모든 저장 프로시저내에서 텍스트 찾기 (0) | 2021.10.25 |
---|---|
쿼리 조건에 들어갈 내용을 파라미터로 전달하기 (0) | 2021.10.18 |
Replication (0) | 2021.10.14 |
C API Asynchronous 함수 정리 (0) | 2021.10.13 |
INSERT와 REPLACE 차이 (0) | 2021.10.13 |