함수 호출 유형 해결
pg_proc 시스템 카탈로그에서 정확히 일치하는지 확인하세요. (관련 사례알 수 없음절대 그렇지 않습니다 이 단계에서 일치하는 항목을 찾으세요.)
가장 일치하는 항목을 찾으세요.
동일한 이름을 가진 모든 사설 토토 사이트의 목록을 만드십시오. 입력 유형과 동일한 수의 인수 일치하거나 강제로 일치시킬 수 있습니다. (알 수 없음리터럴은 다음과 같이 가정됩니다. 이 목적을 위해 무엇이든 강제할 수 있습니다.) 하나만 사용하세요. 그렇지 않으면 다음 단계로 진행하세요.
모든 후보를 살펴보고 다음과 같은 후보를 유지하세요. 입력 유형과 가장 정확하게 일치합니다. 모든 후보자 유지 정확히 일치하는 항목이 없는 경우. 후보가 1명뿐인 경우 남아 있으면 사용하세요. 그렇지 않으면 다음 단계로 진행하세요.
모든 후보를 살펴보고 다음과 같은 후보를 유지하세요. 입력 유형에 대한 가장 정확한 일치 또는 이진 호환 일치. 정확하거나 정확한 정보가 없는 경우 모든 후보를 유지합니다. 바이너리 호환 일치. 후보가 1명뿐인 경우 남아 있으면 사용하세요. 그렇지 않으면 다음 단계로 진행하세요.
모든 후보를 살펴보고 다음 후보를 유지하세요. 유형이 있는 대부분의 위치에서 선호 유형을 허용합니다. 강제집행이 필요할 것입니다. 후보가 없으면 모든 후보 유지 선호하는 유형을 수락합니다. 후보가 1명만 남으면 그것을 사용하십시오; 그렇지 않으면 다음 단계로 진행하세요.
입력 인수가 "알 수 없음"인 경우 유형을 확인하세요. 해당 인수 위치에서 허용되는 범주는 다음과 같습니다. 남은 후보. 각 위치에서 "문자열"을 선택하십시오. 후보자가 해당 카테고리를 수락하는 경우 카테고리(이 문자열에 대한 편향은 다음과 같이 적절합니다. 알 수 없는 유형 리터럴은 문자열처럼 보입니다. 그렇지 않으면 나머지 후보자가 모두 동의하면 동일한 유형 카테고리, 해당 카테고리를 선택하십시오. 그렇지 않으면 올바른 선택을 추론할 수 없기 때문에 실패합니다. 더 이상 단서 없이. 또한 다음 중 하나가 있는지 확인하십시오. 후보자는 선호하는 데이터 유형을 허용합니다. 선택한 카테고리. 이제 다음과 같은 연산자 후보를 삭제합니다. 선택한 유형 카테고리를 허용하지 않습니다. 더욱이, 후보자가 주어진 상황에서 선호하는 유형을 수락하는 경우 인수 위치, 수락하는 후보 삭제 해당 인수에 대해 선호되지 않는 유형입니다.
단 한 명의 후보만 남으면 그것을 사용하십시오. 그렇지 않은 경우 후보가 있거나 둘 이상의 후보가 남아 있는 경우 실패하다.
가장 일치하는 항목이 식별되지 않으면 함수 호출은 사소한 유형의 강제인 것 같습니다. 요청. 함수 호출에 하나만 있는 경우에 발생합니다. 인수와 함수 이름은 (내부) 일부 데이터 유형의 이름입니다. 게다가, 그 사설 토토 사이트은 인수는 알 수 없는 유형 리터럴이거나 유형이어야 합니다. 이는 명명된 데이터 유형과 바이너리 호환됩니다. 언제 이러한 조건이 충족되면 함수 인수가 강제됩니다. 명명된 데이터 유형에.
다음에 정의된 계승 함수는 하나만 있습니다. pg_proc 카탈로그. 따라서 다음 쿼리는 자동으로 를 변환합니다.int2인수int4:
tgl= int4fac(int2 '4') 선택;
int4fac
---------
24
(1행)실제로 파서에 의해 다음과 같이 변환됩니다.tgl= select int4fac(int4(int2 '4'));
int4fac
---------
24
(1행)
두 개가 있습니다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= substr(1234, 3) 선택;
하위 문자열
--------
34
(1행)실제로는 다음과 같이 실행됩니다.tgl= select substr(text(1234), 3);
하위 문자열
--------
34
(1행)변환 기능이 있기 때문에 성공합니다
시스템 카탈로그의 텍스트(int4)입니다.