320x100
C++ 서버에서 MYSQL로 SELECT할 경우 임의로 조건을 컨트롤 하고 싶을 때가 있다.
예를 들자면 서버에서 어떤 때는 1,2,3 어떨 때는 3의 값만 SELECT을 하고 싶은데 하나의 SP로 컨트롤 하고 싶을 때 사용하는 방법이다.
b.type 컬럼의 데이터 타입이 정수라고 하자.
_type은 텍스트 파라미터로 전달되는데 단순히 WHERE b.type IN 으로 작성하면 에러가 난다.
형와 syntax가 맞지 않기 때문이다.
그래서 FIND_IN_SET이라는 함수를 써서 문제를 해결한다.
FIND_IN_SET 함수는 콤마로 구분되어 있는 문자열('a,b,c,d')에 매칭되는 str문자('b')가 있는지 확인해주는 함수다.
매칭되는 것이 있을 경우 몇번째에 있는지 포지션 값을 리턴하고 없으면 0을 리턴한다.
DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_name` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_name`(
IN `_uid` BIGINT UNSIGNED
, IN `_type` VARCHAR(255)
)
BEGIN
UPDATE
a
JOIN
b
ON
a.idx = b.idx
SET
a.value = 0
WHERE
a.uid = _uid AND
FIND_IN_SET(b.type, _type);
END$$
DELIMITER ;
https://eyecandyzero.tistory.com/245
320x100
'DB > MYSQL' 카테고리의 다른 글
쿼리실행 후 영향받은 쿼리 수 구하기 (0) | 2021.11.05 |
---|---|
모든 저장 프로시저내에서 텍스트 찾기 (0) | 2021.10.25 |
동적 쿼리 작성하기 (0) | 2021.10.15 |
Replication (0) | 2021.10.14 |
C API Asynchronous 함수 정리 (0) | 2021.10.13 |