db/MySQL

[MySQL] Stored Procedure

잘할수있을거야 2022. 8. 4. 10:24

  • Stored Procedure 생성
DELIMITER //

CREATE PROCEDURE 프로시져명()
BEGIN
	수행문1;
    	수행문2;
END //

DELIMITER ;

  • Stored Procedure 호출
CALL 프로시져(); //파라메터가 없는 경우
CALL 프로시져(파라메터...) //파라메터가 존재하는 경우

  • Stored Procedure 삭제
DROP PROCEDURE [IF EXISTS] 프로시져명;
//삭제하기 위해서는 ALTER ROUTINE 권한이 필요하다

  • Stored Procedure 파라메터 종류

IN (default 모드), OUT, INOUT 

DELIMITER $$
CREATE PROCEDURE 프로시져명([IN|OUT|INOUT] 파라메터명 타입[길이])
BEGIN
	...
END $$
DELIMITER ;

https://blog.duveen.me/14

 

[Stored Procedure] 4. MySQL Stored Procedure 매개변수

요약 : 이번 강좌에서는 매개변수를 가지는 MySQL 저장 프로시저를 작성하는 방법에 대해서 알아 볼 것이다. 또한, 매개변수의 종류를 이해하기 위해 몇 개의 예를 경험 할 수 있을 것이다. MySQL 저

blog.duveen.me

 

-- IN 동작 (값을 받기만 하고 외부 인자에 영향을 미치지 않음)

DELIMITER $$
CREATE PROCEDURE sp_para_in(IN para_in INT)
BEGIN 
	SELECT para_in AS '프로시져 시작하자마자 넘긴 값 읽음';
	SET para_in = 100;
	SELECT para_in AS '프로시져 내부에서 값 변경';
END $$
DELIMITER ;
SET @test = 1;
SELECT @test AS '넘긴 사용자 변수 값';
CALL sp_para_in(@test);
SELECT @test AS '프로시져 종료 후 사용자 변수 값';

프로시져 내부에서는 읽고 변경할 수 있지만, 호출시 넘겨준 @test에는 영향을 주지 않는다.


-- OUT 동작 (값을 받는 역할이 아닌 값을 만들어 내는 역할)

DELIMITER $$
CREATE PROCEDURE sp_para_out(OUT para_out INT)
BEGIN 
	SELECT para_out AS '프로시져 시작하자마자 넘긴 값 읽음';
	SET para_out = 100;
	SELECT para_out AS '프로시져 내부에서 값 변경';
END $$
DELIMITER ;
SET @test = 1;
SELECT @test AS '넘긴 사용자 변수 값';
CALL sp_para_out(@test);
SELECT @test AS '프로시져 종료 후 사용자 변수 값';

프로시져 호출시 값을 넘겨도 OUT(출력)전용 역할의 파라메터이므로 IN파라메터 처럼 정상적인 값을 읽을 수 없고 NULL로 읽히게 된다.

프로시져 내부에서 값을 변경하면 @test에 영향을 미친다.


-- INOUT 동작 (값을 받을 수도 있고 프로시져 내부에서 변경한 값이 외부 인자에 영향을 미친다)

DELIMITER $$
CREATE PROCEDURE sp_para_inout(INOUT para_in_out INT)
BEGIN 
	SELECT para_in_out AS '프로시져 시작하자마자 넘긴 값 읽음';
	SET para_in_out = 100;
	SELECT para_in_out AS '프로시져 내부에서 값 변경';
END $$
DELIMITER ;
SET @test = 1;
SELECT @test AS '넘긴 사용자 변수 값';
CALL sp_para_inout(@test);
SELECT @test AS '프로시져 종료 후 사용자 변수 값';

INOUT의 IN특성으로 넘어온 값을 읽을 수 있다.

INOUT의 OUT특성으로 외부에 영향을 미친다.


  • 프로시져 변경

프로시져는 ALTER 문이 없어서 수행문이나 파라메터가 변경되어야 하면 

DROP PROCEDURE 후 CREATE PROCEDURE를 사용해야 한다.

 

프로시져 프로그램을 만들기 위한 문법은 다음 글에 이어서