ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [MySQL] Stored Procedure
    db/MySQL 2022. 8. 4. 10:24

    • Stored Procedure 생성
    DELIMITER //
    
    CREATE PROCEDURE 프로시져명()
    BEGIN
    	수행문1;
        	수행문2;
    END //
    
    DELIMITER ;

    • Stored Procedure 호출
    CALL 프로시져(); //파라메터가 없는 경우
    CALL 프로시져(파라메터...) //파라메터가 존재하는 경우

    • Stored Procedure 삭제
    DROP PROCEDURE [IF EXISTS] 프로시져명;
    //삭제하기 위해서는 ALTER ROUTINE 권한이 필요하다

    • Stored Procedure 파라메터 종류

    IN (default 모드), OUT, INOUT 

    DELIMITER $$
    CREATE PROCEDURE 프로시져명([IN|OUT|INOUT] 파라메터명 타입[길이])
    BEGIN
    	...
    END $$
    DELIMITER ;

    https://blog.duveen.me/14

     

    [Stored Procedure] 4. MySQL Stored Procedure 매개변수

    요약 : 이번 강좌에서는 매개변수를 가지는 MySQL 저장 프로시저를 작성하는 방법에 대해서 알아 볼 것이다. 또한, 매개변수의 종류를 이해하기 위해 몇 개의 예를 경험 할 수 있을 것이다. MySQL 저

    blog.duveen.me

     

    -- IN 동작 (값을 받기만 하고 외부 인자에 영향을 미치지 않음)

    DELIMITER $$
    CREATE PROCEDURE sp_para_in(IN para_in INT)
    BEGIN 
    	SELECT para_in AS '프로시져 시작하자마자 넘긴 값 읽음';
    	SET para_in = 100;
    	SELECT para_in AS '프로시져 내부에서 값 변경';
    END $$
    DELIMITER ;
    SET @test = 1;
    SELECT @test AS '넘긴 사용자 변수 값';
    CALL sp_para_in(@test);
    SELECT @test AS '프로시져 종료 후 사용자 변수 값';

    프로시져 내부에서는 읽고 변경할 수 있지만, 호출시 넘겨준 @test에는 영향을 주지 않는다.


    -- OUT 동작 (값을 받는 역할이 아닌 값을 만들어 내는 역할)

    DELIMITER $$
    CREATE PROCEDURE sp_para_out(OUT para_out INT)
    BEGIN 
    	SELECT para_out AS '프로시져 시작하자마자 넘긴 값 읽음';
    	SET para_out = 100;
    	SELECT para_out AS '프로시져 내부에서 값 변경';
    END $$
    DELIMITER ;
    SET @test = 1;
    SELECT @test AS '넘긴 사용자 변수 값';
    CALL sp_para_out(@test);
    SELECT @test AS '프로시져 종료 후 사용자 변수 값';

    프로시져 호출시 값을 넘겨도 OUT(출력)전용 역할의 파라메터이므로 IN파라메터 처럼 정상적인 값을 읽을 수 없고 NULL로 읽히게 된다.

    프로시져 내부에서 값을 변경하면 @test에 영향을 미친다.


    -- INOUT 동작 (값을 받을 수도 있고 프로시져 내부에서 변경한 값이 외부 인자에 영향을 미친다)

    DELIMITER $$
    CREATE PROCEDURE sp_para_inout(INOUT para_in_out INT)
    BEGIN 
    	SELECT para_in_out AS '프로시져 시작하자마자 넘긴 값 읽음';
    	SET para_in_out = 100;
    	SELECT para_in_out AS '프로시져 내부에서 값 변경';
    END $$
    DELIMITER ;
    SET @test = 1;
    SELECT @test AS '넘긴 사용자 변수 값';
    CALL sp_para_inout(@test);
    SELECT @test AS '프로시져 종료 후 사용자 변수 값';

    INOUT의 IN특성으로 넘어온 값을 읽을 수 있다.

    INOUT의 OUT특성으로 외부에 영향을 미친다.


    • 프로시져 변경

    프로시져는 ALTER 문이 없어서 수행문이나 파라메터가 변경되어야 하면 

    DROP PROCEDURE 후 CREATE PROCEDURE를 사용해야 한다.

     

    프로시져 프로그램을 만들기 위한 문법은 다음 글에 이어서

    'db > MySQL' 카테고리의 다른 글

    [MySQL] EXISTS, NOTEXISTS  (0) 2022.08.08
    [MySQL] INSERT  (0) 2022.08.08
    [MySQL] Trigger  (0) 2022.08.03
    [MySQL] FOREIGN KEY  (0) 2022.06.21

    댓글

Designed by Tistory.