사용자 정의 함수
User-defined functionUDF(User-defined function, UDF)는 프로그램이나 환경에 기능이 내장되어 있다는 일반적인 가정이 존재하는 상황에서 프로그램이나 환경의 사용자가 제공하는 함수다. UDF는 보통 그것의 제작자의 요구에 따라 작성된다.
기본어
BASIC 프로그래밍 언어의 일부 이전 구현에서 사용자 정의 함수는 "DEF FN" 구문을 사용하여 정의된다. BASIC의 보다 현대적인 방언은 체계화된 프로그래밍 패러다임의 영향을 받는데, 코드의 대부분 또는 전부가 사용자 정의 기능이나 절차로 쓰여지고, 그 개념은 사실상 중복이 된다.
데이터베이스
관계형 데이터베이스 관리 시스템에서 사용자 정의 함수는 표준 질의어(일반적으로 SQL) 문장으로 평가할 수 있는 함수를 추가하여 데이터베이스 서버의 기능을 확장하는 메커니즘을 제공한다. SQL 표준은 스칼라와 테이블 함수를 구별한다. 스칼라 함수는 단일 값(또는 NULL)만 반환하는 반면, 테이블 함수는 0개 이상의 행으로 구성된 (관계) 테이블을 반환하며, 각 행은 하나 이상의 열이 있다.
SQL의 사용자 정의 함수는 다음을 사용하여 선언됨 CREATE FUNCTION
명세서 예를 들어 섭씨에서 화씨로 변환하는 함수는 다음과 같이 선언될 수 있다.
만들다 함수 dbo..CtoF(섭씨 플로트) 돌아온다 플로트 리턴 (섭씨 * 1.8) + 32
일단 생성되면 SQL 문의 표현식에 사용자 정의 함수를 사용할 수 있다. 예를 들어, 대부분의 다른 내재적 기능이 허용되는 곳에서 실행될 수 있다. 여기에는 데이터베이스의 테이블에 저장된 데이터에 대해 함수를 사용할 수 있는 SELECT 문도 포함된다. 개념적으로 그러한 용도에서 함수는 한 줄에 한 번씩 평가된다. 예를 들어, 이름이 지정된 테이블을 가정해 보십시오. Elements
각 알려진 화학 원소에 대해 행이 있는 경우. 표에는 해당 원소의 비등점에 대한 BoilingPoint라는 이름의 열이 섭씨 단위로 표시된다. 질의
선택 이름, CtoF(비등점) From. 요소들
각 행에서 이름과 비등점을 검색할 것이다. 컬럼의 값을 Fahrenheit의 값으로 변환하기 위해 위에서 선언된 CtoF 사용자 정의 함수를 호출한다.
각 사용자 정의 함수는 특정 속성이나 특성을 전달한다. SQL 표준은 다음과 같은 속성을 정의한다.
- 언어 - 사용자 정의 함수가 구현되는 프로그래밍 언어를 정의한다. 예로는 SQL, C, C# 및 Java가 있다.
- 매개변수 스타일 - 함수의 구현과 데이터베이스 시스템 간에 함수 매개변수와 결과를 전달하는 데 사용되는 규칙을 정의한다(언어가 SQL이 아닌 경우에만 해당).
- 특정 이름 - 데이터베이스 내에서 고유한 함수의 이름. 과부하된 기능을 고려할 때 함수 이름이 고유할 필요는 없다는 점에 유의하십시오. 일부 SQL 구현에서는 함수 이름이 데이터베이스 내에서 고유해야 하며, 오버로드된 함수는 허용되지 않는다.
- 결정론 - 함수가 결정론적인지 여부를 지정한다. 결정론 특성은 SQL 문을 컴파일할 때 쿼리 최적화기에 영향을 미친다.
- SQL 데이터 액세스 - 함수에 SQL 문(NO SQL), SQL 문을 포함하지 않지만 테이블 또는 뷰에 액세스하지 않는지(CANTINGS SQL), 테이블 또는 뷰에서 데이터를 읽는지(READS SQL DATA), 데이터베이스의 데이터를 실제로 수정하는지(MODISS SQL DATA) 데이터베이스 관리 시스템에 알려준다.
사용자 정의 함수는 저장 프로시저와 혼동해서는 안 된다. 저장 프로시저를 통해 사용자는 일련의 SQL 명령을 그룹화할 수 있다. 절차는 매개변수를 받아들이고 매개변수에 따라 SQL 문을 실행할 수 있다. 절차는 표현식이 아니므로 사용자 정의 함수처럼 사용할 수 없다.
일부 데이터베이스 관리 시스템에서는 SQL 이외의 언어로 사용자 정의 함수를 생성할 수 있다. 예를 들어 마이크로소프트 SQL 서버는 사용자가 를 사용할 수 있도록 허용한다.이러한 목적을 위해 C#를 포함한 NET 언어. DB2와 Oracle은 C 또는 Java 프로그래밍 언어로 작성된 사용자 정의 기능을 지원한다.
SQL Server 2000
Microsoft SQL Server 2000에는 스칼라 함수, 인라인 테이블 값 함수, 다주 테이블 값 함수 등 3가지 유형의 UDF가 있다.
스칼라 함수는 RETURN 절과 함께 단일 데이터 값(테이블이 아님)을 반환한다. 스칼라 함수는 타임스탬프 및 사용자 정의 데이터 유형을 제외하고 모든 스칼라 데이터 유형을 사용할 수 있다. 인라인 테이블 값 함수는 단일 SELECT 문의 결과 집합을 반환한다. Multistatement 테이블 값 함수는 TRANSACT-SQL 문장이 많은 테이블을 반환한다.
사용자 정의 함수는 OBERT_ID, LEN, DATIFF와 같은 내장 함수 같은 쿼리에서 호출하거나 저장 프로시저와 같은 실행 명령문을 통해 실행할 수 있다.
성능 노트: 1. Microsoft SQL Server 2000에서는 보기를 "랩"하는 테이블 값 함수가 View 자체보다 훨씬 빠를 수 있다. 다음 MyFunction은 기본 보기 MyView보다 빠르게 실행되는 "기능-와이퍼"의 예다.
만들다 함수 MyFunction() 돌아온다 @Tbl 테이블 ( 학생 ID 바카르(255), SAS_Student인스턴스아이디 INT, 라벨 바카르(255), 가치 머니, CMN_명아이디 INT ) AS 시작 삽입 @Tbl ( 학생 ID, SAS_Student인스턴스아이디, 라벨, 가치, CMN_명아이디 ) 선택 학생 ID, SAS_Student인스턴스아이디, 라벨, 가치, CMN_명아이디 From. 마이뷰 -- 어디에 마이뷰 선택하다 (와 함께 합류하다) 그 같은 기둥 로부터 큰 테이블(s) 리턴 끝
2. Microsoft SQL Server 2005에서 동일한 코드를 실행한 결과는 반대다. "기능 검색기"보다 보기가 더 빨리 실행된다.
사용자 정의 함수는 재사용을 위해 코드를 캡슐화하는 데 사용할 수 있는 하나 이상의 Transact-SQL 문으로 만들어진 서브루틴이다. 0개 이상의 인수를 사용하고 반환 값을 평가한다. 저장 프로시저와 유사한 제어 흐름과 DML 문구를 본체에 가지고 있다. 데이터베이스 또는 파일 또는 네트워크와 같은 외부 리소스에 대한 수정과 같은 글로벌 세션 상태를 변경할 수 없음. 출력 매개 변수를 지원하지 않음 기본 매개 변수의 기본값을 전달하려면 기본 키워드를 지정해야 한다. UDF의 오류로 UDF가 중단되고 UDF를 호출한 문장이 중단된다.
만들다 함수 큐빅볼륨 -- 입력 치수 에 센티미터 ( @CubeLength 십진법의(4,1), @CubeWidth 십진법의(4,1), @CubeHight 십진법의(4,1) ) 돌아온다 십진법의(12,3) AS 시작 리턴(@CubeLength * @CubeWidth * @CubeHight) 끝
Microsoft SQL Server 2000에서 지원되는 데이터 유형 결과 저장에 사용되는 임시 테이블처럼 유형(테이블)의 임시 변수와 UDF의 반환 값을 정의하는 데 주로 사용됨 범위가 기능, 저장 프로시저 또는 정의된 (테이블) 변수 사이에서 허용되지 않는 배치로 제한됨 SELECT에서 사용할 수 있음 UDF Drop Function의 특성을 변경하여 UDF Drop Function의 UDF를 제거하기 위한 UDF ALTER Function의 삽입, 업데이트 및 삭제
아파치 하이브
아파치 하이브는 일반 사용자 정의 함수(UDF) 외에도 사용자 정의 집계 함수(UDAF)와 테이블 생성 함수(UDTF)를 정의한다.[1] 하이브는 개발자들이 자바로 자신만의 사용자 지정 기능을 만들 수 있게 해준다.[2]
참조
- ^ "LanguageManual UDF - Apache Hive - Apache Software Foundation". 26 June 2015.
- ^ "HivePlugins - Apache Hive - Apache Software Foundation". 26 June 2015.