-
[MySQL] Stored Proceduredb/MySQL 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 ;
-- 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를 사용해야 한다.
프로시져 프로그램을 만들기 위한 문법은 다음 글에 이어서
'db > MySQL' 카테고리의 다른 글
[MySQL] EXISTS, NOTEXISTS (0) 2022.08.08 [MySQL] INSERT (0) 2022.08.08 [MySQL] Trigger (0) 2022.08.03 [MySQL] FOREIGN KEY (0) 2022.06.21