MySQL : 변수 선언, 함수, PROCEDURE
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 ;
전의 예제에서는 프로 시저문 내부에서 하나의 변수의 값을 넣어주는 방식이었는데
매개변수를 활용한다면 프로시저를 호출해서 사용할 때마다 다른 변수의 값을 변수에 넣어줄 수 있습니다.