매개변수가 있는 MySQL 저장 프로시저
이 자습서는 MySQL 저장 프로시저에 대해 교육하고 매개 변수를 사용하거나 사용하지 않고 생성하는 방법을 보여줍니다.
매개변수가 있는 MySQL 저장 프로시저
저장 프로시저는 특정 작업을 수행하기 위해 정의하는 하위 프로그램 또는 코드 블록입니다. 다른 프로그래밍 언어의 함수
와 유사합니다.
프로시저는 관계형 데이터베이스에 저장되며 여러 번 호출하여 사용할 수 있습니다. 저장 프로시저를 생성하는 동안 이름을 지정해야 합니다.
또한 여기에 매개변수를 제공할 수도 있습니다. 다음은 MySQL 저장 프로시저를 생성하기 위한 구문입니다.
MySQL 저장 프로시저 생성 구문
CREATE
[DEFINER = user]
PROCEDURE [IF NOT EXISTS] procedure_name ([procedure_parameters[,...]])
[characteristic ...] routine_body
procedure_parameters: [ IN | OUT | INOUT ] parameters_name type
type : _Any valid MySQL _data type
characteristic: {
COMMENT '_string_'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
}
routine_body: Valid SQL routine statement
위의 구문이 압도적인 경우 아래 제공된 위 구문의 더 간단한 버전을 참조할 수 있습니다.
DELIMITER {custom delimiter}
CREATE PROCEDURE procedure_name([IN | OUT | INOUT] param_1 [DATATYPE], ...)
BEGIN
// Your Code
END;
{custom delimiter}
MySQL 저장 프로시저 호출
다음 명령을 사용하여 MySQL 저장 프로시저가 생성되면 호출
할 수 있습니다.
call procedure_name(param_1, param2,...);
MySQL에서 저장 프로시저를 생성하는 동안 다음 사항을 항상 기억하십시오.
CREATE PROCEDURE
명령을 사용하여procedure-name
이 뒤에 오는 MySQL 저장 프로시저를 생성합니다. 프로시저 이름은 대소문자를 구분하지 않습니다. 즉,new_proc
및NEW_PROC
가 동일합니다.- 데이터베이스는 동일한 이름을 가진 두 개의 프로시저를 가질 수 없습니다.
- 절차의 이름은 구분될 수 있습니다. 이름이 구분된 경우 공백이 허용됩니다.
- 프로시저 이름은 64자를 초과할 수 없습니다.
- MySQL의 기본 내장 함수 이름을 프로시저 이름으로 사용하지 마십시오. 그렇지 않으면 오류가 발생합니다.
- 한 쌍의 괄호
()
는CREATE PROCEDURE
의 마지막 구성 요소를 구성합니다. 괄호는 매개변수를 포함합니다. 매개변수가 없으면 빈 괄호를 사용하십시오. - 다음 섹션은 진술이 작성되는 곳입니다.
- 프로시저에만 유효한
OUT
,IN
또는INOUT
으로 매개변수를 지정하십시오. 매개변수를 전달하려면 이 단계를 따라야 합니다.
MySQL 저장 프로시저의 IN
매개변수
IN
매개변수는 저장 프로시저에 값을 전달합니다.
DELIMITER //
CREATE PROCEDURE simple_addition (IN param_1 INT, IN param_2 INT)
BEGIN
SELECT param_1 + param_2;
END //
DELIMITER ;
CALL simple_addition(2,4); #produces 6 as output
출력:
param_1 + param_2
6
MySQL 저장 프로시저의 OUT
매개변수
호출 프로그램으로 다시 전달되는 저장 프로시저 내에서 OUT
매개변수의 값을 업데이트할 수 있습니다.
DELIMITER //
CREATE PROCEDURE simple_addition (IN param_1 INT, IN param_2 INT, OUT param_3 INT)
BEGIN
SET param_3 = param_1 + param_2;
END //
DELIMITER ;
CALL simple_addition(2,4, @output_var);
SELECT @output_var;
출력:
@output_var
6
MySQL 저장 프로시저의 INOUT
매개변수
INOUT
매개변수는 IN
및 OUT
매개변수를 결합합니다. 호출 프로그램은 저장 프로시저에서 수정할 수 있는 인수를 전달할 수 있으며 호출 프로그램에 새 값을 반환합니다.
DELIMITER //
CREATE PROCEDURE counter(INOUT set_counter INT, IN increment INT)
BEGIN
SET set_counter = set_counter + increment;
END //
DELIMITER ;
SET @counter = 1;
CALL counter(@counter,2); -- 3
CALL counter(@counter,5); -- 8
SELECT @counter; -- 8
출력:
@counter
8
여기에서 increment
를 입력 매개변수로 사용하고 set_counter
는 입력 및 출력 매개변수입니다.
MySQL 저장 프로시저의 특징
MySQL은 생성 중인 프로시저의 특성을 설명할 수 있는 액세스 권한을 제공합니다.
characteristic: {
COMMENT '_string_'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
}
이러한 특성 뒤에는 괄호가 오고 BEGIN
절이 앞에 옵니다. 그러나 이러한 특성은 선택 사항입니다. 이러한 코드 줄을 매번 명시적으로 작성할 필요는 없습니다.
특성 | 설명 |
---|---|
COMMENT |
저장된 루틴을 설명하는 데 사용됩니다. 모든 세부 사항은 SHOW CREATE PROCEDURE 문으로 표시됩니다. |
LANGUAGE |
이는 프로시저의 본문이 SQL로 작성되었음을 나타냅니다. |
[NOT] 결정적 |
루틴은 동일한 입력 매개변수에 대해 동일한 결과를 일관되게 생성하는 경우 결정적 으로 간주되고 그렇지 않은 경우 결정적이지 않음 으로 간주됩니다. |
SQL 포함 |
루틴에 데이터를 읽거나 쓰는 명령문이 포함되어 있지 않음을 나타냅니다. |
NO SQL |
프로시저에 NO SQL 문이 있음을 나타냅니다. |
SQL 데이터 읽기 |
절차는 SELECT 명령과 같이 데이터를 읽는 명령문으로만 구성됩니다. |
SQL 데이터 수정 |
프로그램에는 MODIFIES SQL DATA (예: INSERT 또는 DELETE )로 데이터를 쓸 수 있는 명령문이 포함되어 있습니다. |
`SQL 보안{정의자 | 호출자}` |
위의 모든 특성 절 값은 기본값입니다. 예를 들어 다음 두 저장 프로시저는 동일한 출력을 생성합니다.
DELIMITER //
CREATE PROCEDURE procedure_name ()
BEGIN
SELECT CURRENT_DATE();
END //
DELIMITER ;
call procedure_name(); -- 2022-09-05
위의 코드는 특성을 명시적으로 언급한 경우와 동일합니다.
DELIMITER //
CREATE PROCEDURE procedure_name ()
COMMENT ''
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
BEGIN
SELECT CURRENT_DATE();
END //
DELIMITER ;
call procedure_name(); -- 2022-09-05
지금까지 MySQL에서 프로시저와 함께 매개변수를 사용하는 방법을 배웠습니다.