같은 SQL 이름으로 하나 이상의 함수를 정의할 수 있습니다. 그들이 취하는 주장이 다른 한. 즉, 함수 이름은 다음과 같습니다.오버로드. 언제 쿼리가 실행되면 서버는 어떤 토토 사이트을 수행할지 결정합니다. 제공된 데이터 유형 및 번호에서 호출 인수. 오버로딩을 사용하여 함수를 시뮬레이션할 수도 있습니다. 유한한 최대값까지 가변 개수의 인수 사용 번호.
오버로드된 함수 계열을 생성할 때 다음 중 하나를 수행해야 합니다. 모호함이 생기지 않도록 주의하세요. 예를 들어, 주어진 기능:
CREATE FUNCTION 테스트(int, real) 반환... CREATE FUNCTION 테스트(smallint, 배정밀도) RETURNS ...
어떤 함수가 호출될지는 즉시 명확하지 않습니다 다음과 같은 사소한 입력으로테스트(1, 1.5). 현재 구현된 해결 규칙은 다음과 같습니다. 설명됨토토 베이 : 문서 : 8.4 : 변환 유형하지만 그렇죠 이에 미묘하게 의존하는 시스템을 설계하는 것은 현명하지 않습니다. 행동.
복합 유형의 단일 인수를 취하는 함수 일반적으로 속성(필드)과 동일한 이름을 가져서는 안 됩니다. 그런 종류의. 그것을 기억해내세요속성(테이블)다음과 동등한 것으로 간주됩니다.테이블.속성. 그런 경우에는 복합 유형의 함수와 복합 유형의 속성인 경우 속성은 항상 사용. 스키마 한정을 통해 해당 선택을 무시할 수 있습니다. 함수 이름(즉,schema.func(테이블)) 하지만 다음을 피하는 것이 좋습니다. 충돌하는 이름을 선택하지 않아서 문제가 발생했습니다.
또 다른 가능한 충돌은 가변성과 비가변성 사이에 있습니다. 토토 사이트. 예를 들어, 둘 다 생성하는 것이 가능합니다.foo(숫자)그리고foo(VARIADIC 숫자[]). 이 경우 어느 쪽을 선택해야 할지 불분명합니다. 다음과 같은 단일 숫자 인수를 제공하는 호출과 일치합니다.foo(10.1). 규칙은 다음과 같습니다. 검색 경로의 앞부분에 나타나는 것이 사용되거나 두 가지가 사용되는 경우 함수가 동일한 스키마에 있고 가변적이지 않은 함수는 다음과 같습니다. 선호합니다.
C 언어 함수를 오버로드할 때 추가 제약 조건: 계열에 있는 각 함수의 C 이름 오버로드된 함수는 모든 함수의 C 이름과 달라야 합니다. 내부 또는 동적으로 로드되는 기타 기능. 만약 이 규칙을 위반하면 동작이 이식 가능하지 않습니다. 당신은 런타임 링커 오류가 발생하거나 함수 중 하나가 호출됩니다. (보통 내부). 의 대체 형식ASSQL에 대한 절함수 생성명령은 SQL 함수를 분리합니다 C 소스 코드의 함수 이름에서 가져온 이름입니다. 에 대한 인스턴스:
CREATE FUNCTION 테스트(int) RETURNS int
그대로 '파일 이름', 'test_1arg'
언어 C;
CREATE FUNCTION test(int, int) 반환 int
그대로 '파일 이름', 'test_2arg'
언어 C;
여기에 있는 C 함수의 이름은 가능한 많은 것 중 하나를 반영합니다. 규칙.