여러가지/DBMS

[MariaDB] 프로시저

15June 2024. 5. 27. 14:24

1) 프로시저 생성

DELIMITER //

▷DELIMITER : SQL 문의 종료 기호 변경 명령어

CREATE PROCEDURE procedure_name(

    IN 변수1 datatype,

    IN 변수2 datatype, 

    …

    ▷ 매개변수 정의

)

BEGIN

    SQL 문;

    SQL 문;

    …

    ▷ 실행시킬 DML 명령어 기입

END //

※ BEGIN과 END 사이가 본문으로 프로시저의 실제 작업이 포함됩니다.

단, 명령어가 하나인 경우 BEGIN, END를 사용하지 않아도 됩니다.

DELIMITER ;

 

ex) 

(a) user_info 테이블에 INSERT 작업 수행 프로시저 생성

DELIMITER //

CREATE PROCEDURE insert_user(

    IN name_value VARCHAR(20),

    IN team_id_value INT,

    IN email_value VARCHAR(50),

    IN age_value INT

)

BEGIN

    INSERT INTO user_info (name, team_id, email, age)

    VALUES (name_value, team_id_value, email_value, age_value);

END //

DELIMITER ;

 

(b) team_info 테이블에 INSERT 작업 수행 프로시저 생성

DELIMITER //

CREATE PROCEDURE insert_team(

    IN name_value VARCHAR(50)

)

BEGIN

    INSERT INTO team_info (name) VALUES (name_value);

END //

DELIMITER ;

 

2) 프로시저 사용

CALL procedure_name(...);

 

ex)

(a) team_info 테이블에 값 추가

CALL insert_team('RED');

CALL insert_team('BLUE');

CALL insert_team('YELLOW');

CALL insert_team('GREEN');

 

(b) user_info 테이블에 값 추가

CALL insert_user('yjyoo', 1, 'yjyoo@pnpsecure.com', 24);

CALL insert_user('jhpark', 1, 'jhpark@pnpsecure.com', 39);

CALL insert_user('slkim', 4, 'slkim@pnpsecure.com', 26);

CALL insert_user('jhkim', 4, 'jhkim@pnpsecure.com', 32);

CALL insert_user('sbcho', 4, 'sbcho@pnpsecure.com', 29);

CALL insert_user('jhjeon', 2, 'jhjeon@pnpsecure.com', 27);

CALL insert_user('jjlee', 2, 'jjlee@pnpsecure.com', 30);

CALL insert_user('dyhan', 3, 'dyhan@pnpsecure.com', 30);

CALL insert_user('jkjeng', 3, 'jkjeng@pnpsecure.com', 25);

 

3) 특정 프로시저 정의 확인

SHOW CREATE PROCEDURE procedure_name;  

 

※ 프로시저는 수정할 수 없습니다.

※ 프로시저 이름은 변경할 수 없습니다.

 

4) 프로시저 삭제

DROP PROCEDURE procedure_name;

DROP PROCEDURE IF EXISTS procedure_name;

▷ IF EXISTS : 존재한다면 삭제

※ IF EXISTS 옵션은 데이터베이스, 테이블, 트리거, 뷰 등에도 사용 가능합니다.