728x90
반응형
prinha.tistory.com/entry/MySQL-Stored-Procedure%EC%9D%98-%EB%B3%80%EC%88%98
저장 프로시저 매개변수의 3가지 모드(mode)
# 저장 프로시저에 매개변수를 정의하는 문법
MODE 매개변수이름 데이터타입(사이즈)
IN
프로시저에 값을 전달하며, 프로시저 내부에서 값을 수정할 수는 있지만 프로시저가 반환되고나서 호출자가 수정할 수는 없다.
즉 원본 값은 저장 프로시저가 끝난 후에도 유지되어지며 저장프로시저는 IN매개변수의 복사본만을 사용한다는 뜻이다.
# 프로시저 생성
USE `classicmodels`;
DROP procedure IF EXISTS `GetOfficeByCountry`;
DELIMITER $$
USE `classicmodels`$$
CREATE PROCEDURE `GetOfficeByCountry` (IN countryName VARCHAR(255))
BEGIN
SELECT * FROM offices
WHERE country = countryName;
END$$
DELIMITER ;
CALL GetOfficeByCountry('USA');
OUT
프로시저의 값을 호출자에게 다시 전달한다.
초기값은 프로시저 내에서 NULL값이며 프로시저가 반환될 때 새로운 값이 호출자에게 리턴된다.
프로그램이 시작될 때, OUT매개변수의 초기값에 접근할 수 없다.
USE `classicmodels`;
DROP procedure IF EXISTS `CountOrderByStatus`;
DELIMITER $$
USE `classicmodels`$$
CREATE PROCEDURE `CountOrderByStatus` (IN orderStatus VARCHAR(25),OUT total INT)
BEGIN
SELECT count(orderNumber)
INTO total #매개변수 total에 count 복사
FROM orders
WHERE status = orderStatus;
END$$
DELIMITER ;
CALL CountOrderByStatus('Shipped', @total); # 세션매개변수 total에 값 저장
SELECT @total; # @total값 호출
CALL CountOrderByStatus('in process',@total);
SELECT @total AS total_in_process;
INOUT
호출자에 의해 하나의 변수가 초기화되고 프로시저에 의해 수정된다. IN+OUT의 결합이다.
프로시저가 리턴할 때 프로시저가 변경한 사항은 호출자에게 리턴된다.
USE `classicmodels`;
DROP procedure IF EXISTS `set_counter`;
DELIMITER $$
USE `classicmodels`$$
CREATE PROCEDURE `set_counter` (INOUT count INT(4), IN x INT(4))
BEGIN
SET count=count+x;
END$$
DELIMITER ;
SET @counter = 10;
CALL set_counter(@counter, 1); #SELECT @counter = 11
CALL set_counter(@counter, 2); #SELECT @counter = 13
CALL set_counter(@counter, 5); #SELECT @counter = 18
SELECT @counter; #18
참고 및 출처 : blog.duveen.me/14?category=657591
728x90
반응형
'Data > MySQL' 카테고리의 다른 글
[MySQL] Stored Procedure의 조건문 IF ELSEIF / CASE (0) | 2021.01.08 |
---|---|
[MySQL] 저장프로시저 다중 값 반환 예제 (0) | 2021.01.07 |
[MySQL] Stored Procedure의 변수 (0) | 2021.01.07 |
[MySQL] 스토어드 프로시저(Stored Procedure) 사용법 (0) | 2021.01.07 |
[MySQL] 컬럼추가, 컬럼의 이름 변경, 컬럼삭제, 컬럼의 데이터타입 변경 (0) | 2021.01.06 |