본문 바로가기

기타

[MySQL] Stored Procedure란? MYSQL DB Stored Procedure 기초

데이터 베이스에 함수를 사용한다? 

항상 SQL Query문만 다뤄오시던 분이라면, 이번 기회에 데이터베이스에서 함수라는 것도 다뤄보시는것이 어떤지~ 추천 드립니다.


함수라는 것은 일정 루틴, 즉, 명령어 수행 구조를 가지고 있게 됩니다.


단 하나의 일을 하더라도, 해당 함수는 그 일의 재료를 주던가 아니면, 안주던가 

일을 하고 결과를 나타나게 되어있습니다.


만약 결과를 돌려준다면, 그것을 흔히들 반환값이라고 하죠.


데이터베이스에서도 이와 유사한 일들을 할 수 있습니다.


기존에 프로그래밍을 해보셨다면, 아마도 이러한 내용들이 보다 쉽게 이해가 가실겁니다.


데이터베이스에서 함수란 DBMS에게 쿼리문을 줘서 해당 쿼리문에 맞춰 자료를 뽑아오면, 뽑아진 자료를 이리저리 만지작 만지작 거린다음에, 결과를 저장하던, 아니면, 요청한 사람에게 이를 돌려주던 하는 일반적인 프로그래밍의 역할을 해냅니다.


MySQL에서는 내장 프로시저, 즉, DB에 저장된 함수를 사용자가 불러다 쓰는 것이죠.


그래서 이를 Stored, "저장된", "내장된" 이름으로 쓰는 것입니다.


이런 내장 프로시저를 만드는데는 몇가지 알아야 할 사항이 있는데, 첫번째가 "delimiter"라는 존재입니다.


이 delimiter는 구분자, 즉, 명령어 단락 구역을 만들 수 있게 도와주는 넘입니다.


SQL 구문은 ';' 문자로 끝나게 됩니다.


근데 프로시저 안에서 한줄 끝날때 마다 ;를 다 넣어주면, 어디가 쿼리문이고 어디가 프로시저 문인지를 헛갈리게 됩니다.


따라서 "여기서 여기 까지가 프로시저야" 라는 걸 알려주기 위해서 delimiter를 씁니다.


DELIMITER $$


이렇게 하여서 ';'을 "$$"로 바꾸어 주게 되는데요.


이렇게 하면, 프로시저를 꾸며줄 때 한줄이 끝났을 때 ';'를 써줘도 함수가 끝나지 않았다는 것을 인식 시켜줄 수 있습니다.



그리고 프로시저를 다 꾸미고 나면, 다시 "$$" 를 ';'로 바꾸어줍니다.


두번째로는 파라미터, "인자 값들의 종류" 입니다.


총 3가지(IN, OUT, INOUT)게 있게 되는데요.


1. IN


IN 파라미터는 "읽기 전용" 이라는 것입니다. 프로서저를 호출할 때 건네주게 되면, 이를 프로시저 안에서 값을 가져다 쓸뿐 바꿀 수 없다는 것이죠.


2. OUT


OUT 파라미터는 "값을 변경 할 수 있는" 속성을 가진 파라미터 입니다.


흔히들 이 파라미터는 프로시저 내부에서 일을 처리한 뒤, 값을 돌려줄때 많이 씁니다.


3. INOUT


INOUT 파라미터는 IN의 속성과 OUT의 속성을 다 가지고 있습니다.


프로시저 호출자로 부터 값을 전달 받아 이를 고쳐서 다시 돌려줄때 사용하게 되는 것이죠.


세번째로는 프로시저의 시작과 끝입니다.

프로시저는 BEGIN 으로 시작해서 END로 끝나게 됩니다.


따라서,

 

CREATE PROCEDURE testproc()

BEGIN

 ....

END


이런 형태로 만드셔야 합니다.


이제 기본적인 사항들은 끝난듯 싶습니다.


더 필요한 이야기는 다음에 다루도록 하겠습니다~!

반응형