바닥코딩
SQL 문법 활용(1) 본문
1. SET 구문
= 프로시저에 변수나 파라미터에 값을 저장하려면 보통 2가지 방법이 있는데 SET을 이용하거나 SELECT 를 이용해 값을 넣는 방법이다
SET 을 이용하는 경우는 SET 변수 =100 ; 이러한 형식으로 값을 넣지만 SELECT 는 조건이 필요하다 SELECT로 값을 받아오려면 사용자 정의 변수를 사용해야하는데 3가지 조건이 필요하다
1. 변수 이름은 @ 로 시작한다
2. DECLARE는 해주지 않는다
3. = 이 아니라 := 를 사용한다
ex) SELECT @변수 1:=필드 FROM [테이블 명]
2. PREPARE /EXECUTE 구문
동적 SQL과 같은 경우 미리 쿼리문장을 준비한 후에 나중에 실핼하는 것을 의미하는데 이를 PREPARE와 EXECUTE로 구현할 수 있다.
PREPARE [쿼리 이름 ] FORM '쿼리문' --- 쿼리문을 준비하고 싱행하지는 않음
EXECUTE [쿼리 이름] USING @변수 --- 쿼리문이 실행됨
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
CREATE DEFINER = 'root'@'%'
// db명.procedure명
PROCEDURE userdb.modify_userinfo(
IN p_Key INT // 업데이트 할 데이터의 인덱스 값
, IN p_change_col VARCHAR(50) // 바꿀 컬럼 명
, IN p_new_val VARCHAR(50) // 업데이트 할 값
)
BEGIN
SET @temp1 = p_change_col;
SET @temp2 = p_new_val;
SET @temp3 = p_UserDBKey;
SET @v_colsql= CONCAT(@temp1, "=?");
// @temp1에 컬럼 명이 담겨 있으므로, '컬럼=값' 형태의 문자열이 된다.
// ?를 사용하면 나중에 값을 바인딩 할 수 있다.
// 최종 쿼리 문
SET @xSql = CONCAT("update table_user set ", @v_colsql, " where UserKey=?");
PREPARE stmt FROM @xSql;
START TRANSACTION; // 트랜잭션 시작(필요할 경우 사용. 생략 가능)
EXECUTE stmt USING @temp2, @temp3; // 위에서 쓰인 두 개의 ? 에 인자를 바인딩 하여 쿼리 실행
DEALLOCATE PREPARE stmt; // prepare문을 해제한다.
COMMIT;
END
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
위의 쿼리 문과 같이 프로시저 정의 에서도 사용할 수 있는데 PREPARE을 통해 해당 쿼리를 준비 하고 EXECUTE를 통해 이를 실행한 뒤 DEALLOCATE 를통해 PREPARE 된 statement를 해제 한다
'데이터 베이스 > SQL' 카테고리의 다른 글
SQL 문법 활용 (3) (1) | 2020.01.03 |
---|---|
SQL 문법 활용(2) (0) | 2020.01.03 |
절차형 SQL 주요 문법 (0) | 2020.01.03 |
PROCEDURE(프로시저) / TRIGGER(트리거) (0) | 2020.01.03 |
절차형 SQL (0) | 2020.01.03 |