본문 바로가기
SQL/MySQL

MySQL 프로시저(Procedure) 만들기부터 실행 확인까지

by wakestand 2021. 2. 2.
반응형

MySQL에서 프로시저(Procedure)를 사용해 주면

여러 쿼리를 프로시저 하나로 실행시킬 수 있는데

 

함수(Function)와 비교해 보자면

함수는 쿼리를 수행한 후 값을 가져오는 것이 중점이지만

프로시저는 여러 쿼리를 한번에 수행하는 것이 중점이다

 

MySQL 함수(Function) 만들기부터 조회까지 정리글

MySQL에서 함수는 MySQL Workbench 왼쪽의 Functions 우클릭 후 Create Function을 눌러 만들 수 있는데 함수를 작성하기에 앞서 아래 글을 보고 함수 생성과 실행 권한을 줘야한다 MySQL 함수 프로시저 생성 변

wakestand.tistory.com

프로시저를 생성하기에 앞서

MySQL에 프로시저 생성 권한을 줬는지 확인하고

 

MySQL 함수 프로시저 생성 변경 불가능한 현상 해결방법

MySQL에서 프로시저(Procedure) 함수(Function) 등을 만드는 경우 ERROR 1418: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging..

wakestand.tistory.com

이후 스크린샷에 보이는 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
반응형

댓글