매개변수가 있는 MySQL 저장 프로시저

Preet Sanghavi 2023년6월20일
매개변수가 있는 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에서 저장 프로시저를 생성하는 동안 다음 사항을 항상 기억하십시오.

  1. CREATE PROCEDURE 명령을 사용하여 procedure-name이 뒤에 오는 MySQL 저장 프로시저를 생성합니다. 프로시저 이름은 대소문자를 구분하지 않습니다. 즉, new_procNEW_PROC가 동일합니다.
  2. 데이터베이스는 동일한 이름을 가진 두 개의 프로시저를 가질 수 없습니다.
  3. 절차의 이름은 구분될 수 있습니다. 이름이 구분된 경우 공백이 허용됩니다.
  4. 프로시저 이름은 64자를 초과할 수 없습니다.
  5. MySQL의 기본 내장 함수 이름을 프로시저 이름으로 사용하지 마십시오. 그렇지 않으면 오류가 발생합니다.
  6. 한 쌍의 괄호 ()CREATE PROCEDURE의 마지막 구성 요소를 구성합니다. 괄호는 매개변수를 포함합니다. 매개변수가 없으면 빈 괄호를 사용하십시오.
  7. 다음 섹션은 진술이 작성되는 곳입니다.
  8. 프로시저에만 유효한 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 매개변수는 INOUT 매개변수를 결합합니다. 호출 프로그램은 저장 프로시저에서 수정할 수 있는 인수를 전달할 수 있으며 호출 프로그램에 새 값을 반환합니다.

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에서 프로시저와 함께 매개변수를 사용하는 방법을 배웠습니다.

Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

관련 문장 - MySQL Stored Procedure