저장 프로시저 자세한 개념 : https://velog.io/@fasongsong/%EC%A0%80%EC%9E%A5-%ED%94%84%EB%A1%9C%EC%8B%9C%EC%A0%80Stored-PROCEDURE
-- 기존에 있는거 날리기
drop table user;
drop procedure `proc_user_insert`;
CREATE Table user(
`id` varchar(20),
`name` varchar(20),
`campus` varchar(20),
`class` varchar(20),
`gi` varchar(20)
);
-- 저장 프로시저
DELIMITER //
CREATE PROCEDURE `proc_user_insert` (
IN `p_id` varchar(20),
IN `p_name` VARCHAR(20),
IN `p_campus` VARCHAR(20),
IN `p_class` varchar(20),
IN `p_gi` varchar(20)
)
BEGIN
INSERT INTO `user` (id, name, campus, class, gi)
VALUES (p_id, p_name, p_campus, p_class, p_gi);
END
//
DELIMITER ;
//구분자 변경안했을 경우 (에러)
-- CREATE PROCEDURE `proc_user_insert` (
-- IN `p_id` INT,
-- IN `p_name` VARCHAR(20),
-- IN `p_campus` VARCHAR(20),
-- IN `p_class` INT,
-- IN `p_gi` INT
-- )
-- BEGIN
-- INSERT INTO `user` (id, name, campus, class, gi)
-- VALUES (p_id, p_name, p_campus, p_class, p_gi);
-- END;
CALL `proc_user_insert`('hello', '홍길동', '서울', '1반', '1기');
select * from user;
MySQL 저장 프로시저에서 사용되는 IN, OUT, INOUT 매개변수는 프로시저 호출 시 입력값을 받고 결과값을 반환하는 방법을 정의함
역할: 프로시저 호출 시 호출자가 입력하는 값을 받습니다.
특징: 프로시저 내에서 값을 변경할 수 있지만, 호출자에게는 변경된 값이 반영되지 않습니다. 입력 전용입니다.
예제:
CREATE PROCEDURE example_in(IN p_value INT)
BEGIN
-- 입력된 p_value를 사용하여 로직 수행
END;
역할: 프로시저가 실행된 후 결과값을 호출자에게 반환합니다.
특징: 프로시저 내에서 값을 설정해야 하며, 호출자에게 반환됩니다. 출력 전용입니다.
예제:
CREATE PROCEDURE example_out(OUT p_result INT)
BEGIN
-- 결과값을 p_result에 설정
SET p_result = 42;
END;
역할: 호출자가 입력한 값을 받고, 그 값을 수정한 후 호출자에게 반환합니다.
특징: 입력과 출력이 모두 가능합니다. 프로시저 내에서 값을 변경하면, 변경된 값이 호출자에게 반영됩니다.
예제:
CREATE PROCEDURE example_inout(INOUT p_value INT)
BEGIN
-- p_value 값을 수정
SET p_value = p_value + 10;
END;
아래 예제는 IN, OUT, INOUT 매개변수를 모두 사용하는 저장 프로시저
DELIMITER //
CREATE PROCEDURE example_all(
IN p_input INT,
OUT p_output INT,
INOUT p_inout INT
)
BEGIN
-- p_input은 입력 값으로 사용
DECLARE temp INT;
SET temp = p_input * 2;
-- p_output에 결과값 설정
SET p_output = temp;
-- p_inout 값을 수정
SET p_inout = p_inout + temp;
END
//
DELIMITER ;
프로시저를 호출하는 예제
-- 변수 선언
SET @input = 5;
SET @output = 0;
SET @inout = 3;
-- 프로시저 호출
CALL example_all(@input, @output, @inout);
-- 결과 확인
SELECT @output; -- 결과: 10 (5 * 2)
SELECT @inout; -- 결과: 13 (3 + 10)
SET @variable_name = value;
SELECT @variable_name;
SET @number1 = 10;
SET @number2 = 20;
SET @sum = @number1 + @number2;
SELECT @sum; -- 결과: 30
저장 프로시저를 호출할 때 세션 변수를 사용하여 결과를 저장하고, 호출 후에 결과를 확인할 수 있음
예제: 레코드셋 사용
아래 예제는 ssafy_user 테이블에서 모든 사용자를 선택하는 쿼리와 그 결과로 반환되는 레코드셋을 보여줌
SELECT * FROM user;
결과 레코드셋:
id name campus class gi
1 홍길동 서울 1반 5
2 김철수 부산 2반 3
이 쿼리는 ssafy_user 테이블의 모든 행을 반환하며, 각 행은 사용자의 정보를 포함하고 있음
예제: 위 예시 참고