동적 SQL
동적 SQL은 미리 쿼리문을 준비한 후에 나중에 실행하는 것을 말한다. PREPARE과 EXECUTE로 구현할 수 있다.
PREPARE 쿼리이름 FROM '쿼리문'; -- 쿼리문을 준비만 하고 실행하지 않음
EXECUTE 쿼리이름 [USING @변수]; -- 쿼리문이 실행됨
PREPARE과 EXECUTE의 형식은 위와 같다. 쿼리 이름은 내 마음대로 설정할 수 있고 PREPARE에 있는 '쿼리문'은 EXECUTE 를 만나는 순간에 실행된다. USING @변수는 '쿼리문'에 대입할 수 있는 파라미터 같은 것. 아래 예시를 보면 이해하기 쉽다.
SET @var = 1;
PREPARE myQuery FROM 'INSERT INTO myTable VALUES(NULL, ?)';
EXECUTE myQuery USING @var;
'INSERT INTO myTable VALUES(NULL, ?)'은 myTable의 각 열에 null과 ?을 추가한다는 의미다.
'?'는 향후 EXECUTE에서 입력될 값을 의미한다.
따라서 EXECUTE myQuery USING @var; 는 ?에 var를 대입해서 myQurey를 실행하는 것이다.
결국 INSERT INTO myTable VALUES(NULL, var)가 되는 것.
사실 EXECUTE로 쿼리문을 실행한 후에는 DEALLOCATE PREPARE로 문장을 해제하는 것이 바람직하다. 그러므로 아래처럼 사용하자.
SET @var = 1;
PREPARE myQuery FROM 'INSERT INTO myTable VALUES(NULL, ?)';
EXECUTE myQuery USING @var;
DEALLOCATE PREPARE myQuery;
출처: https://dang-dang12.tistory.com/29?category=776015 [🌷박튤립 장벚꽃🌸]
'DataBase > Mysql' 카테고리의 다른 글
[MySQL] auto_increment 삭제, 초기화 (how to remove auto_increment in mysql) (0) | 2020.01.03 |
---|---|
[MySQL] foreign key(외래키) 추가, 삭제, 확인 방법 (0) | 2019.12.23 |
MySQL 오류 처리(조건 핸들러) (0) | 2019.12.13 |
MySQL문자를 숫자로 숫자를 문자로 데이터 형 변환 (cast, convert) (0) | 2019.12.13 |
[MySQL] error FK에러 cannot add foreign key constraint 해결 (0) | 2019.12.07 |