2010년 7월 8일 목요일

[MySQL Stored Procedure]Stored Function

Stored Function이란?
 - 하나의 값을 반환하는 stored program
 - OUT, INOUT변수가 아닌 RETURN으로 값을 반환
 - 내장함수와 동일한 형태로 DML에서 사용 가능
 - 복잡한 코딩을 줄여줄 수 있다

 

 

Stored Function만들기
 - Syntax

   CREATE FUNCTION function_name (paramters[,...])
   RETURNS datatype
   [[NOT]DETERMINISTIC]
   [{CONTAINS SQL|NO SQL|MODIFIES SQL DATA|READS SQL DATA}]
   [SQL SECURITY {DEFINER|INVOKER}]
   [COMMENT string]
   function_statement

 - Return절은 필수임
 - 파라메터는 IN으로 처리됨

 

 

Return 문
 - 리턴문은 하나만 있는 것이 좋다(조건문으로 분기시 변수 사용)

 

 

DETERMINISTIC과 SQL절

 - 바이너리 로그를 사용할 경우 반드시 고려해야 함
   바이너리 로그를 사용하는 경우 해당 FUNCTION이 동일한 결과(DETERMINISTIC)를 가지는지 확인해야함(시스템시간등의 사용 유의)
   모든 Stored program을 위한 기본값은 NOT DETERMINISTIC CONTAINS SQL이므로 반드시 명시적으로 표시가 필요
   NOW() 함수 또는 시간을 기반으로 하는 함수와 하나의 랜덤값을 발생시키는 함수는 NON DETERMINISTIC이 아님(사용해도 무방)
   이를 막기 위해서 DETERMINISTIC, NO_SQL또는 READ_SQL_DATA키워드를 정의하거나 log_bin_trust_routine_creater옵션을 1로 설정해야 실행됨

Stored Function 생성시 주의할점


 - 옵티마이저를 사용하지 않으므로 성능 테스트 필요


 - 자주 사용되는 쿼리에는 사용하지 않음

댓글 없음:

댓글 쓰기