이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.사설 토토 42 |_1 |04버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

7.3. 기능

함수 호출의 인수 유형은 다음에 따라 해결됩니다. 다음 단계를 따르세요.

함수 인수 유형 결정

  1. 다음에서 고려할 기능을 선택하세요.pg_proc시스템 카탈로그. 만약에 규정되지 않은 함수 이름이 사용되었습니다. 올바른 이름과 인수 개수가 고려됩니다. 현재 검색 경로에 표시되는 항목(참조섹션 2.8.3). 만약에 정규화된 함수 이름이 지정되었습니다. 지정된 스키마가 고려됩니다.

    1. 검색 경로가 다음의 여러 기능을 찾는 경우 동일한 인수 유형, 하나만 나타남 경로의 가장 빠른 것으로 간주됩니다. 그러나 기능 서로 다른 인수 유형은 동일하게 간주됩니다. 검색 경로 위치에 상관없이 바닥글.

  2. 입력을 정확하게 받아들이는 함수를 확인하세요 인수 유형. 존재하는 경우(정확한 항목은 하나만 있을 수 있음) 고려된 와이즈 토토 세트와 일치), 이를 사용하십시오. (사례 관련된알 수 없음결코 찾지 못할 것입니다 이 단계에서 일치합니다.)

  3. 완전히 일치하는 항목이 없으면 함수가 호출은 사소한 유형의 강제 요청인 것 같습니다. 이 함수 호출에 인수가 하나만 있고 함수 이름은 일부 함수의 (내부) 이름과 동일합니다. 데이터 유형. 또한 함수 인수는 다음과 같아야 합니다. 알 수 없는 유형의 리터럴이거나 다음과 같은 유형입니다. 명명된 데이터 유형과 바이너리 호환 가능. 이것들이 언제 조건이 충족되면 함수 인수가 강제로 적용됩니다. 명시적인 함수 호출 없이 명명된 데이터 유형입니다.

  4. 가장 일치하는 항목을 찾으세요.

    1. 입력된 후보 함수를 폐기합니다. 유형이 일치하지 않으며 강제할 수 없습니다( 암시적 강제 함수)를 일치시킵니다.알 수 없음리터럴은 다음과 같이 가정됩니다. 이를 위해 무엇이든 강제할 수 있습니다. 하나만 있으면 후보가 남아 있으면 사용하십시오. 그렇지 않으면 다음으로 계속 단계.

    2. 모든 후보를 살펴보고 다음과 같은 후보를 유지하세요. 입력 유형과 가장 정확하게 일치합니다. 모든 후보자 유지 정확히 일치하는 항목이 없는 경우. 후보가 1명뿐인 경우 남아 있으면 사용하세요. 그렇지 않으면 다음 단계로 진행하세요.

    3. 모든 후보를 살펴보고 다음과 같은 후보를 유지하세요. 입력 유형에 대한 가장 정확한 일치 또는 이진 호환 일치. 정확하거나 정확한 정보가 없는 경우 모든 후보를 유지합니다. 바이너리 호환 일치. 후보가 1명뿐인 경우 남아 있으면 사용하세요. 그렇지 않으면 다음 단계로 진행하세요.

    4. 모든 후보를 살펴보고 해당 후보를 유지하세요. 유형이 있는 대부분의 위치에서 선호 유형을 허용합니다. 강제집행이 필요할 것입니다. 후보가 없으면 모든 후보 유지 선호하는 유형을 수락합니다. 후보가 1명만 남으면 그것을 사용하십시오; 그렇지 않으면 다음 단계로 진행하세요.

    5. 입력 인수가 다음과 같은 경우알 수 없음, 허용되는 유형 카테고리를 확인하세요. 나머지 인수에 의한 해당 인수 위치에서 후보자. 각 위치에서 다음을 선택합니다.문자열후보자가 수락하는 경우 카테고리 해당 카테고리(문자열에 대한 이러한 편견은 적절합니다. 알 수 없는 유형의 리터럴은 문자열처럼 보이기 때문입니다. 그렇지 않으면 나머지 후보자가 모두 동의하면 동일한 유형 카테고리, 해당 카테고리를 선택하십시오. 그렇지 않으면 올바른 선택을 추론할 수 없기 때문에 실패합니다. 더 이상 단서 없이. 또한 다음 중 하나가 있는지 확인하십시오. 후보자는 선호하는 데이터 유형을 허용합니다. 선택한 카테고리. 이제 그렇지 않은 후보자를 폐기하십시오. 선택한 유형 카테고리를 수락합니다. 게다가 혹시 있다면 후보자는 주어진 인수에서 선호하는 유형을 허용합니다. 직책, 선호하지 않는 후보자를 수락하는 후보자 삭제 해당 인수에 대한 유형입니다.

    6. 후보가 하나만 남으면 그것을 사용하십시오. 그렇지 않은 경우 후보가 있거나 둘 이상의 후보가 남아 있는 경우 실패하다.

예 7-4. 계승 함수 인수 유형 해결

단 하나뿐입니다int4fac함수는에 정의되어 있습니다.pg_proc카탈로그. 따라서 다음 쿼리는 자동으로int2인수int4:

tgl= SELECT int4fac(int2 '4');
 int4fac
---------
      24
(1행)

실제로 파서에 의해 다음과 같이 변환됩니다.

tgl= SELECT int4fac(int4(int2 '4'));
 int4fac
---------
      24
(1행)

예 7-5. 하위 문자열 함수 유형 해결

두 개가 있습니다substr함수 에서 선언됨pg_proc. 그러나, 단 하나의 유형만 두 개의 인수를 취합니다.텍스트그리고int4.

지정되지 않은 유형의 문자열 상수로 호출되면, 유형은 유일한 후보 함수와 직접 일치합니다. 유형:

tgl= SELECT substr('1234', 3);
 하위 문자열
--------
     34
(1행)

문자열이 유형으로 선언된 경우varchar, 이는 다음에서 오는 경우일 수 있습니다. 그러면 파서는 테이블을 강제로 테이블로 만들려고 시도합니다.텍스트:

tgl= SELECT substr(varchar '1234', 3);
 하위 문자열
--------
     34
(1행)

파서에 의해 다음과 같이 변환됩니다.

tgl= SELECT substr(text(varchar '1234'), 3);
 하위 문자열
--------
     34
(1행)

참고:실제로 파서는 다음을 알고 있습니다.텍스트그리고varchar아르바이너리 호환, 이는 다음이 가능함을 의미합니다. 수행하지 않고 상대방을 받아들이는 함수에 전달됨 모든 물리적 변환. 따라서 명시적인 유형이 없습니다. 이 경우 실제로 전환 호출이 삽입됩니다.

그리고 함수가 다음과 함께 호출되면int4, 파서는 이를 다음으로 변환하려고 시도합니다.텍스트:

tgl= SELECT substr(1234, 3);
 하위 문자열
--------
     34
(1행)

실제로는 다음과 같이 실행됩니다.

tgl= SELECT substr(text(1234), 3);
 하위 문자열
--------
     34
(1행)

변환 기능이 있기 때문에 성공합니다 시스템 카탈로그의 텍스트(int4)입니다.