바닥코딩

SQL 문법 활용(1) 본문

데이터 베이스/SQL

SQL 문법 활용(1)

개발공부개발공부 2020. 1. 3. 13:17

 

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