function 함수 문법은 procedure과 비슷한 문법이다.
용도는 같지만 기능이 살짝 다르다.
procedure는 자주 쓰는 긴 코드를 한 단어로 만들어놓고 싶을 때 쓴다고 했는데 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와 가장 큰 차이점이다.
create function mart.vat(구멍 int)
returns int
deterministic
begin
return 구멍*0.1;
end
vat라고 함수 이름을 작명했고 구멍으로 int 자료를 입력할 수 있다. 그리고 가격의 10%로 부가세를 뱉어낸다.
SELECT mart.vat(10000) // 출력 : 1000
drop function if exists 함수명;
delimiter $$
create function 함수명()
returns int
begin
어쩌구
return 저쩌구;
end
$$
delimiter ;
MySQL의 function 안에서는 select 문법으로 출력하는것을 금지하고 있다.
select한 것을 변수에 집어넣어주는 select into 문법과 서브쿼리용도(select 어쩌고)도 허용된다.
테이블 출력만 금지된다.
MySQL의 보안장치이다.
함수를 만들어 사용할 때 함수가
1. 구멍에 뭘 넣어도 항상 같은 값을 return하면 deterministic
2. sql 문법을 사용안하면 no sql
3. 안에 select를 사용하면 reads sql data
4. 안에 insert delete를 사용하면 modifies sql data
를 표기해야한다.
근데 표기한게 맞는지 컴퓨터가 정확히 체크하는 것이 아니라
보통 deterministic으로 해두면된다.
하지만 나중에 데이터가 많아지면 이 정보들로 execution plan을 만들 때 컴퓨터가 혼란스러워할 수 있어서 정확히 적는 것이 좋다.