이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다사설 와이즈 토토 42 |_1 |04버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

10.3. 와이즈 토토

함수 호출에 의해 참조되는 특정 함수는 다음과 같습니다. 다음 절차를 사용하여 결정.

함수 유형 해상도

  1. 에서 고려할 함수를 선택하십시오PG_PROC시스템 카탈로그. 경우 a 비 스키마 자격이없는 함수 이름이 사용되었습니다 일치하는 이름과 인수가있는 사람으로 간주됩니다 현재 검색 경로에서 볼 수있는 카운트 (참조섹션 5.7.3). 자격을 갖춘 와이즈 토토 이름이 주어진 경우에만 지정된 스키마의 함수가 고려됩니다.

    1. 검색 경로에서 여러 와이즈 토토을 찾는 경우 동일한 인수 유형 만 나타나는 것만 나타납니다 경로에서 가장 빠른 것이 고려됩니다. 의 와이즈 토토 다른 인수 유형은 동일하게 고려됩니다 검색 경로 위치에 관계없이 기초.

    2. 함수가 a로 선언 된 경우variadic배열 매개 변수 및 호출 사용하지 않습니다.variadic키워드, 그 기능은 배열처럼 취급됩니다. 파라미터는 하나 이상의 발생으로 대체되었습니다 통화와 일치하는 데 필요한 요소 유형. 후에 이러한 확장 기능이 효과적 일 수 있습니다 인수 유형은 비 전환 기능과 동일합니다. 이 경우 기능이 이전에 나타납니다 검색 경로가 사용되거나 두 기능이 동일한 스키마, 비 전당 스키마가 선호됩니다.

    3. 매개 변수에 대한 기본값이있는 함수 0 또는 더 많은 기본 매개 변수 위치. 더 있다면 그러한 함수 중 하나보다 호출과 일치합니다 검색 경로에서 가장 일찍 나타납니다. 거기 있다면 동일한 스키마에서 둘 이상의 와이즈 토토입니다. 비 분개에서 동일한 매개 변수 유형 위치 (다른 경우 가능합니다 기본 가능한 매개 변수 세트), 시스템은 그렇지 않습니다 선호하는 사람을 결정할 수 있습니다."모호한 와이즈 토토 호출"통화와 더 잘 일치하지 않으면 오류가 발생합니다. 설립하다.

  2. 입력을 정확하게 수락하는 함수를 확인하십시오 인수 유형. 하나가 존재하는 경우 (정확한 하나만있을 수 있습니다 고려 된 함수 세트에서 일치) 사용하십시오. (케이스 관련알 수없는결코 찾을 수 없습니다 이 단계에서 일치합니다.)

  3. 정확히 일치하지 않으면 함수 호출이 있는지 확인하십시오. 특수 유형 변환 요청으로 보입니다. 이것 함수 호출에 단 하나의 인수가 있고 함수 이름은 일부의 (내부) 이름과 동일합니다. 데이터 유형. 또한 와이즈 토토 인수는해야합니다 알려지지 않은 문자 그대로 또는 유형입니다 이름이 지정된 데이터 유형 또는 적용하여 명명 된 데이터 유형으로 변환 할 수 있습니다. 유형의 I/O 함수 (즉, 변환은 또는 표준 문자열 유형 중 하나에서). 이런 경우 조건이 충족되고 와이즈 토토 호출은 형태로 취급됩니다. 의캐스트사양.[1]

  4. 최고의 경기를 찾으십시오.

    1. 입력의 후보 함수 폐기 유형은 일치하지 않으며 변환 할 수 없습니다 (사용 암시 적 변환) 일치합니다.알 수없는리터럴이 가정됩니다 이 목적을 위해 무엇이든 전환 할 수 있습니다. 단지 하나라면 후보자는 남아있다. 그렇지 않으면 다음으로 계속됩니다 단계.

    2. 모든 후보자를 통해 그와 함께 보관하십시오 입력 유형에서 가장 정확한 일치. (도메인입니다 이것에 대한 기본 유형과 동일하게 간주됩니다 목적.) 모든 후보자를 정확히 가지고 있지 않은 경우 유지하십시오 성냥. 한 명의 후보 만 남아 있으면 사용하십시오. 또 다른 다음 단계로 계속하십시오.

    3. 모든 후보자를 통해 실행하여 그를 유지하십시오 선호하는 유형을 허용합니다 (입력 데이터 유형의 유형 카테고리) 유형 변환의 대부분의 위치에서 필요합니다. 아무도 수락하지 않으면 모든 후보자를 유지하십시오 선호하는 유형. 한 명의 후보 만 남아 있으면 사용하십시오. 그렇지 않으면 다음 단계로 계속됩니다.

    4. 입력 인수가있는 경우알 수없는, 허용 된 유형 범주를 확인하십시오 그 논쟁에서 나머지는 위치에 있습니다 후보자. 각 위치에서를 선택하십시오.String카테고리 후보자가 수락하는 경우 그 범주. (문자열에 대한이 편견은 적절합니다 알려지지 않은 문자가 문자열처럼 보이므로.) 그렇지 않으면 나머지 후보자가 모두 수락하는 경우 동일한 유형 카테고리, 해당 범주를 선택하십시오. 그렇지 않으면 올바른 선택은 추론 할 수 없기 때문에 실패합니다 더 많은 단서없이. 이제 그렇지 않은 후보자를 버립니다 선택한 유형 범주를 수락하십시오. 또한 후보자는 해당 범주에서 선호하는 유형을 수락하며 선호되지 않은 유형을 수락하는 후보자를 폐기하십시오 그 주장.

    5. 한 후보 만 남아 있으면 사용하십시오. 아니오 그러므로 후보 또는 두 명 이상의 후보가 남아 있습니다 실패하다.

"Best Match"규칙 작업자 및 기능 유형 해상도와 동일합니다. 일부 예는 다음과 같습니다.

예 10-4. 반올림 함수 인수 유형 해결

하나만 있습니다라운드두 인수를 취하는 함수; 첫 번째 논쟁이 필요합니다 유형숫자그리고 두 번째 인수 유형Integer. 그래서 다음 쿼리 유형의 첫 번째 인수를 자동으로 변환정수to숫자:

선택 라운드 (4, 4);

 둥근
--------
 4.0000
(1 행)

그 쿼리는 실제로 파서에 의해 :으로 변환됩니다.

원형 (캐스트 (4 숫자), 4); 선택

소수점이있는 숫자 상수가 처음이므로 유형 할당숫자, 다음 쿼리는 유형 변환이 필요하지 않으므로 약간 더 효율적인 :

Round (4.0, 4); 선택

예 10-5. 서브 스트링 함수 유형 해결

몇 가지가 있습니다서브 스트함수, 그 중 하나는 유형을 취합니다텍스트andInteger. 문자열로 호출 된 경우 지정되지 않은 유형의 일정한 시스템은 후보를 선택합니다 선호하는 범주의 인수를 받아들이는 와이즈 토토String(즉, 유형텍스트).

SELECT SUBSTR ( '1234', 3);

 기판
--------
     34
(1 행)

문자열이 유형으로 선언 된 경우Varchar테이블, 그러면 파서는 그것을 변환하려고 시도합니다텍스트:

SELECT SUBSTR (Varchar '1234', 3);

 기판
--------
     34
(1 행)

이것은 파서에 의해 효과적으로되는 것으로 변신합니다 :

SELL SELECT SEPTRT (CAST (Varchar '1234'as Text), 3);

참고 :파서는에서 배웁니다pg_cast카탈로그텍스트andVarcharAre 이진 호환성, 즉 하나를 전달할 수 있음을 의미합니다 물리적 인 일을하지 않고 상대방을 받아들이는 와이즈 토토 변환. 따라서 유형 변환 호출은 실제로 없습니다 이 경우 삽입.

그리고 함수가 유형의 인수로 호출되는 경우정수, 파서는 변환을 시도합니다 그게텍스트:

SELECT SUBSTR (1234, 3);
오류 : 함수 서브 (정수, 정수)가 존재하지 않습니다
힌트 : 주어진 이름과 인수 유형과 일치하지 않습니다. 필요할 수도 있습니다
명시 적 유형 캐스트를 추가하려면

이것은 작동하지 않기 때문에정수암시 적 캐스트가 없습니다텍스트. 그러나 명백한 캐스트는 효과가 있습니다 :

SELECT SEPSTR (Cast (1234 AS 텍스트), 3);

 기판
--------
     34
(1 행)

노트

[1]

이 단계의 이유는 기능 스타일 캐스트를 지원하는 것입니다. 실제 캐스트가없는 경우 사양 기능. 캐스트 기능이 있으면 일반적으로입니다 출력 유형의 이름을 따서 명명되었으므로 가질 필요가 없습니다. 특별한 경우. 보다캐스트 만들기추가 해설.