13.7.3.1 사용자 정의 함수에 대한 CREATE FUNCTION 구문
CREATE [AGGREGATE] FUNCTION
function_name
RETURNS {STRING|INTEGER|REAL|DECIMAL} SONAMEshared_library_name
사용자 정의 함수 (UDF)는 ABS()
와 CONCAT()
등의 네이티브 (기본 제공) MySQL 함수처럼 작동하는 새로운 함수에 의해 MySQL를 확장하기위한 방법입니다.
function_name
은이 함수를 호출하는 SQL 문에서 사용되는 이름입니다. RETURNS
절은 함수의 반환 형식을 나타냅니다. DECIMAL
은 RETURNS
뒤의 정당한 값이지만, 현재 DECIMAL
함수는 문자열 값을 반환하므로 STRING
함수와 같이 기술하십시오.
shared_library_name
이 함수를 구현하는 코드를 포함하는 공유 객체 파일의 기본 이름입니다. 이 파일은 플러그인 디렉토리에 존재해야합니다. 이 디렉토리는 plugin_dir
시스템 변수의 값을 얻을 수 있습니다. 자세한 내용은 섹션 24.3.2.5 "사용자 정의 함수의 컴파일 및 설치" 를 참조하십시오.
함수를 작성하려면 mysql
데이터베이스에 대한 INSERT
권한이 필요합니다. 이것이 필요한 것은 CREATE FUNCTION
의해 함수의 이름, 형태, 및 공유 라이브러리 명을 기록 mysql.func
시스템 테이블에 행이 추가되기 때문입니다. 이 테이블이 존재하지 않는 경우, mysql_upgrade 명령을 실행하여 작성하도록하십시오. 섹션 4.4.7 "mysql_upgrade - MySQL 테이블 체크 및 업그레이드" 를 참조하십시오.
활성 함수는 CREATE FUNCTION
을 사용하여로드되고 있고, DROP FUNCTION
을 사용하여 삭제되지 않은 함수입니다. 모든 활성 함수는 서버가 시작할 때마다 다시로드됩니다 만, --skip-grant-tables
옵션을 지정해 mysqld를 시작하면 다릅니다. 이 경우, UDF 초기화가 생략되고 UDF는 사용할 수 없습니다.
사용자 정의 함수를 작성하기위한 지침은 섹션 24.3.2 "새로운 사용자 정의 함수 추가" 를 참조하십시오. UDF의 메카니즘이 기능하려면, 함수를 C 또는 C ++ (또는 C 호출 규칙을 사용할 수있는 다른 언어)로 작성해야 운영 체제가 동적로드를 지원해야하며, 또한 mysqld를 (정적 아니라) 동적으로 컴파일하고있을 필요가 있습니다.
AGGREGATE
함수는 SUM
이나 COUNT()
등의 기본 MySQL 집계 (요약) 함수와 동일하게 작동합니다. AGGREGATE
가 작동하려면 mysql.func
테이블에 type
컬럼을 포함해야합니다. mysql.func
테이블에 컬럼이 포함되지 않은 경우 mysql_upgrade 프로그램을 실행하여 작성하도록하십시오 ( 섹션 4.4.7 "mysql_upgrade - MySQL 테이블 체크 및 업그레이드" 를 참조하십시오).
UDF에 연결된 공유 라이브러리를 업그레이드하려면 DROP FUNCTION
문을 발행하여 공유 라이브러리를 업그레이드 한 후, CREATE FUNCTION
문을 실행합니다. 먼저 공유 라이브러리를 업그레이드 한 후 DROP FUNCTION
을 사용하면 서버가 충돌 할 가능성이 있습니다.