24.4.2.1 간단한 함수를위한 UDF 호출 순서
이 섹션에서는 간단한 UDF를 만들 때 정의해야하는 다양한 함수에 대해 설명합니다. 섹션 24.3.2 "새로운 사용자 정의 함수 추가" 에는 MySQL이이 함수를 호출 순서가 기재되어 있습니다.
메인 xxx()
함수는이 절과 같이 선언합니다. CREATE FUNCTION
문에서 SQL 함수 XXX()
이 STRING
, INTEGER
또는 REAL
중 반환 여부에 따라 반환 형식과 매개 변수는 다릅니다.
STRING
함수의 경우 :
char *xxx(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error);
INTEGER
함수의 경우 :
long long xxx(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
REAL
함수의 경우 :
double xxx(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
DECIMAL
함수는 문자열 값을 반환하므로 STRING
함수와 마찬가지로 선언하십시오. ROW
함수는 구현되어 있지 않습니다.
초기화 함수 및 초기화 해제 함수는 다음과 같이 선언합니다.
my_bool xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message); void xxx_deinit(UDF_INIT *initid);
initid
매개 변수는 세 가지 기능 모두에 전달됩니다. 이것은 함수간에 정보를 교환하는 데 사용되는 UDF_INIT
구조체를 가리 킵니다. UDF_INIT
구조체 멤버를 보여줍니다. 초기화 함수에서 변경할 멤버를 설정하십시오. (회원의 기본을 사용하는 경우는 변경하지 않고 그대로 있습니다.)
my_bool maybe_null
xxx()
가NULL
을 반환 할 수있는 경우xxx_init()
는maybe_null
을1
로 설정합니다. 몇개의 인수가maybe_null
로 선언되는 경우 기본값은1
입니다.unsigned int decimals
소수점 이하 자리수. 기본값은 메인 함수에 전달 된 인수의 소수점 자릿수의 최대 값입니다. 예를 들어, 함수에
1.34
,1.345
및1.3
이 전달 된 경우1.345
의 소수점 이하의 자리수가 3이기 때문에 기본값은 3입니다.인수로 소수점 이하의 자리수가 고정되어 있지 않은 경우,
decimals
값은 31로 설정되어 지금은DECIMAL
,FLOAT
및DOUBLE
데이터 유형에 허용되는 최대의 소수점 이하의 자리수에 1을 더한 값입니다 . MySQL 5.6에서는이 값은mysql_com.h
헤더 파일의 상수NOT_FIXED_DEC
로 사용할 수 있습니다.decimals
값 31은FLOAT
컬럼 또는DOUBLE
컬럼이 소수점 이하의 자리수를 명시하지 않고 선언 된 (예를 들어,FLOAT(10,3)
이 아닌FLOAT
) 경우 인수 또는1345E-3
등의 부동 소수점 상수에 사용됩니다. 이것은 함수에서 숫자 형식으로 변환 될 수있는 문자열 및 기타 숫자가 아닌 인수에도 사용됩니다.decimals
멤버를 초기화하는 값은 디폴트에 지나지 않습니다. 이것은 실행되는 실제 계산이 반영되도록 함수 내에서 변경할 수 있습니다. 기본값은 인수의 최대의 소수점 이하의 자리수가 사용되도록 결정합니다. 몇개의 인수의 소수점 이하의 자리수가NOT_FIXED_DEC
인 경우, 그 값이decimals
에 사용됩니다.unsigned int max_length
결과의 최대 길이. 기본
max_length
값은 함수의 결과 유형에 따라 다릅니다. 문자열 함수의 경우 기본값은 가장 긴 인수의 길이입니다. 정수 함수의 경우, 디폴트는 21 자리입니다. 실제 함수의 경우, 디폴트는initid->decimals
에 의해 표시된 소수점 이하의 자리수에 13을 더한 값입니다. (수치 함수의 경우 길이는 부호 문자 또는 소수점 문자가 포함되어 있습니다.)BLOB 값을 반환하는 경우
max_length
를 65K 바이트 또는 16M 바이트로 설정할 수 있습니다. 이 메모리가 할당되지 않지만,이 값은 데이터를 일시적으로 저장해야하는 경우에 사용하는 데이터 형식을 결정하는 데 사용됩니다.char *ptr
함수에서 용도에 사용할 수있는 포인터. 예를 들어, 여러 함수 사이에서
initid->ptr
을 사용하여 할당 된 메모리를 교환 할 수 있습니다.xxx_init()
이 메모리를 할당하고, 그것을이 포인터에 할당합니다.initid->ptr = allocated_memory;
xxx()
및xxx_deinit()
는initid->ptr
을 참조하여 메모리를 사용 또는 할당 해제합니다.my_bool const_item
xxx_init()
는xxx()
가 항상 같은 값을 돌려주는 경우는const_item
을1
로 설정하고 그렇지 않으면0
으로 설정합니다.