IT 개발 관련/MySQL

MySQL : 변수 선언, 함수, PROCEDURE

felixorlby 2022. 2. 18. 21:41

MySQL : 변수 선언, 함수, PROCEDURE

MySQL은 기본적으로 DBMS이지만, 변수 선언이나 함수 사용,

PROCEDURE을 활용한 Programing까지 가능합니다.

 

변수 선언 

SET @myVar1 = 5;
SET @myVar2 = 10;
SET @myVar3 = 6.59;
SET @myVar4 = '아이돌 멤버의 이름 =>';

변수의 선언은 위 코드 블록을 보시면 아시겠지만 

SET @변수명 = 값; 의 문법을 사용하시면 됩니다.

 

변수 선언 예제

SELECT 

-- 기본적으로 변수를 지정해서 출력해주는 것
SELECT @myVar1;

-- 변수를 출력할 때 간단한 연산을 한 후 출력하는 것
SELECT (@myVar2 + @myVar3);

-- idolTbl이라는 테이블 생성
CREATE TABLE idolTbl(
    idol_name varchar(4)
    );
    
-- idolTbl 테이블에 데이터 추가
INSERT INTO idolTbl VALUES('A');
INSERT INTO idolTbl VALUES('B');
INSERT INTO idolTbl VALUES('C');
INSERT INTO idolTbl VALUES('D');
    
-- 일반 테이블 데이터와 함께 변수의 출력 데이터를 나열하는 것
SELECT @myVar4, idol_name FROM idolTbl;

 

SELECT 출력 결과

마지막 변수 myVar4를 활용한 예제의 출력 결과만 살펴보겠습니다.

@myVar4 idol_name
아이돌 멤버의 이름 => A
아이돌 멤버의 이름 => B
아이돌 멤버의 이름 => C
아이돌 멤버의 이름 => D

 

CONCAT

MySQL에서는 자바와 다르게 연산에 있어서 다른 점을 발견할 수 있다.

 SELECT '100' + 200;
 SELECT '1000' + '1000';
 SELECT '가나다' + 100;

위 간단한 연산들의 식을 봤을때 우리는 문자와 숫자 간의 연산은 문자형으로 형 변환이 되어서 

'100200'이라는 결과를 예측할 것이다.

하지만 MySQL에서는 숫자형으로 형변환을 하기 때문에 실행 결과는 300이 나온다. 

 

첫 번째 SELECT -> 300

두 번째 SELECT -> 2000

세 번째 SELECT -> 100

자바에서는 세 번째 연산은 실행이 안될 텐데 MySQL에서는 100이라는 결과가 나온다.

 

그럼 숫자로 이루어진 문자와 숫자로 이루어진 문자를 연산했을 때 자바에서처럼 

문자들 간의 나열의 결과로 만들어주고 싶을 땐 CONCAT이라는 내장 함수를 사용하면 된다.

 

-- '100'과 '200'을 더하는 연산
-- 결과를 '100200'이 나올수 있도록 만들고 싶을때
-- CONCAT 사용
SELECT CONCAT('100','200');

 

 

PROCEDURE

SQL에서 변수선언이 가능하고 여러 가지 내장 함수도 있다는 것을 알 수 있는데 

여기서 더 나아가 프로그래밍까지 진행할 수 있습니다.

 

문법)

DELIMITER $$ -- 시작시점
CREATE PROCEDURE 선언할 프로시저이름()
BEGIN -- 실제 실행코드는 BEGIN 아래에 작성합니다.
-- 실행코드 ...
END $$
DELIMITER;

-- 위 문법으로 하나의 프로시저를 선언해두었다면
-- 프로시저 사용은 아래와 같이 합니다.
CALL 프로시저명();

 

PROCEDURE 예제

 

-- IF - ELSE문을 사용하여 프로시저 작성
DELIMITER $$
CREATE PROCEDURE ifProc()
BEGIN
     DECLARE var1 INT; -- 변수 선언 DECLARE
     SET var1 = 2000; -- 선언한 변수에 값 저장
     IF var1 = 100 THEN -- IF문 선언
          SELECT '100이 맞습니다.';
     ELSE 
          SELECT '100이 아닙니다.';
     END IF; -- IF문 종료지점
END $$ -- 프로시저 종료시점
DELIMITER ;

마지막 DELIMITER 구분기호로 프로시저를 마무리해줄 때 세미클론을 한 칸 띄고 붙여주어야 합니다.

그래서 위 예제를 살펴보면 프로시저 구성이 var1이 100인 경우와 아닌 경우로 나누어서

출력 결과를 다르게 해 준 IF문입니다. 위 코드처럼 프로시저를 선언해두었으면 사용은 CALL을 작성해서 합니다.

 

CALL ifProc();

이렇게 프로시저를 호출하면 위와 같은 로직으로 작성하는 프로시저를 불러오는 것입니다.

 

 

PROCEDURE 활용

 

PROCEDURE을 선언해서 사용할 때 CALL 프로시저명( );의 문법으로 사용할 수 있습니다.

이때 자바에서의 메서드를 만들어서 사용할 때 조건을 넣어 메서드를 호출할 수 있는 것처럼

( ) 소괄호 안에 매개변수를 선언할 수 있습니다.

DELIMITER $$ 
CREATE PROCEDURE ifProc2(number INTEGER)
BEGIN 
   DECLARE var1 INT;
   SET var1 = number;
   IF var1 = 100 THEN 
       SELECT '100이 맞습니다.';
   ELSE 
       SELECT '100이 아닙니다.';
   END IF;
END $$ 
DELIMITER ;

전의 예제에서는 프로 시저문 내부에서 하나의 변수의 값을 넣어주는 방식이었는데

매개변수를 활용한다면 프로시저를 호출해서 사용할 때마다 다른 변수의 값을 변수에 넣어줄 수 있습니다.