MySQL에서 프로시저(Procedure)를 사용해 주면
여러 쿼리를 프로시저 하나로 실행시킬 수 있는데
함수(Function)와 비교해 보자면
함수는 쿼리를 수행한 후 값을 가져오는 것이 중점이지만
프로시저는 여러 쿼리를 한번에 수행하는 것이 중점이다
프로시저를 생성하기에 앞서
MySQL에 프로시저 생성 권한을 줬는지 확인하고
이후 스크린샷에 보이는 Stored Procedures 우클릭 후
Create Stored Procedure를 눌러 프로시저를 생성해 준다
프로시저 생성 시 중요한 부분은
프로시저명() 안에 있는 파라미터 선언부분
BEGIN ~ END 사이에 수행할 쿼리 두 부분인데
먼저 파라미터는 프로시저 호출 시 특정 값을 넣어 호출할 경우
그 값을 받을 파라미터의 이름과 데이터타입을 설정하는 거고
BEGIN ~ END 사이에는
수행할 쿼리를 적어주면 된다
그리고 SELECT 사용 시에는 조회한 컬럼을 반드시
INTO로 변수 안에 넣어줘야 에러가 나지 않는다
프로시저를 작성한 후에는
우측 하단의 Apply를 눌러주면 생성이 완료된다
혹여나 잘못 작성해서 수정할 경우에는
프로시저 우클릭 > Alter Stored Procedure 선택 후
쿼리를 변경하고 다시 Apply만 눌러주면 된다
이제 위 예제를 통해 전체 과정을 알아보면
PROC_TEST 프로시저는 VARCHAR(20) 타입의 PARAM_NAME
INTEGER 타입의 PARAM_AGE 파라미터를 받으며
INTEGER 타입의 PARAM_NUM 변수를 선언한 후
TB1 테이블의 전체 ROW행 + 1값을 넣어준다
이후 INSERT 문을 수행해 TB1 테이블에 PARAM_NUM 변수
파라미터로 받은 PARAM_NAME, PARAM_AGE를 넣어주면
PROC_TEST 프로시저는 끝이 난다
이후 프로시저 호출 시에는
CALL 프로시저명(파라미터);
이렇게 사용해주면 정상적으로 동작하는 것이 보인다
마지막으로 예제에 사용한 프로시저 생성 쿼리는 아래와 같다
CREATE PROCEDURE `PROC_TEST` (
PARAM_NAME VARCHAR(20) -- 파라미터 선언
, PARAM_AGE INTEGER
)
BEGIN
DECLARE PARAM_NUM INTEGER; -- 변수 선언
SELECT COUNT(*) + 1
INTO PARAM_NUM -- 변수에 값 할당
FROM TB1;
-- INSERT 문 수행
INSERT INTO TB1(NUM, NAME, AGE) VALUES(PARAM_NUM, PARAM_NAME, PARAM_AGE);
END
'SQL > MySQL' 카테고리의 다른 글
MySQL GROUP BY HAVING 사용방법 (0) | 2021.02.08 |
---|---|
MySQL 인덱스 조회 생성 수정 삭제 및 타는지 확인방법 (0) | 2021.02.03 |
MySQL 스키마별 전체 테이블 행(ROW) 갯수 확인방법 (0) | 2021.02.01 |
MySQL 함수(Function) 만들기부터 조회까지 정리글 (1) | 2021.01.25 |
MySQL IN NOT IN 사용방법 및 예제 (0) | 2021.01.22 |
댓글