procedure과 비슷한 function 문법

윤빈·2026년 2월 8일

SQL & Database

목록 보기
20/25

function 함수 문법은 procedure과 비슷한 문법이다.
용도는 같지만 기능이 살짝 다르다.
procedure는 자주 쓰는 긴 코드를 한 단어로 만들어놓고 싶을 때 쓴다고 했는데 function도 똑같다.

function 만들 때 필요한 문법

create function db이름.함수이름(구멍 int)
returns int
deterministic
begin
	return 100;
end

1.procedure처럼 파라미터 넣을 수 있다.
2. returns 뒤에 return할 자료의 데이터타입을 넣어야한다.
3. deterministic도 넣어줘야한다.
4. return 뒤에 function 사용 후에 뱉을 값을 기입해줘야한다. return은 전에 했던 out 파라미터랑 동일한 용도이다.

무조건 어떤 데이터를 return 해야하는게 procedure와 가장 큰 차이점이다.

procedure와의 차이점

  1. 긴 쿼리문을 자주 재사용하고 싶으면 procedure
  • call 문법으로 소환
  • return(out 파라미터) 없어도됨
  • 쿼리문 중간에 사용불가
  1. 계산기능을 만들었는데 그걸 자주 재사용하고 싶으면 function
    ex) 제품가격을 입력하면 부가세가 얼마인지 계산을 자주 해야할 때, 제품 가격을 입력하면 배송비가 얼마인지 계산을 자주 해야할 때
  • call 문법 필요없음
  • return 무조건 있어야함
  • 쿼리문 중간에서든 어디서든 자유롭게 사용가능

부가세 계산 자주하고 싶은데

create function mart.vat(구멍 int)
returns int
deterministic
begin
	return 구멍*0.1;
end

vat라고 함수 이름을 작명했고 구멍으로 int 자료를 입력할 수 있다. 그리고 가격의 10%로 부가세를 뱉어낸다.

SELECT mart.vat(10000) // 출력 : 1000

직접 SQL 코드짜서 function 만들고 싶으면

drop function if exists 함수명;
delimiter $$

create function 함수명()
returns int
begin
 어쩌구
 return 저쩌구;
end
$$
delimiter ;

function 주의사항

MySQL의 function 안에서는 select 문법으로 출력하는것을 금지하고 있다.
select한 것을 변수에 집어넣어주는 select into 문법과 서브쿼리용도(select 어쩌고)도 허용된다.
테이블 출력만 금지된다.

deterministic

MySQL의 보안장치이다.
함수를 만들어 사용할 때 함수가
1. 구멍에 뭘 넣어도 항상 같은 값을 return하면 deterministic
2. sql 문법을 사용안하면 no sql
3. 안에 select를 사용하면 reads sql data
4. 안에 insert delete를 사용하면 modifies sql data
를 표기해야한다.

근데 표기한게 맞는지 컴퓨터가 정확히 체크하는 것이 아니라
보통 deterministic으로 해두면된다.
하지만 나중에 데이터가 많아지면 이 정보들로 execution plan을 만들 때 컴퓨터가 혼란스러워할 수 있어서 정확히 적는 것이 좋다.

profile
취준하려면 이런건하나씩있어야한다길래

0개의 댓글