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

7.2. 운영자

토토 캔 호출의 피토토 캔 유형이 해결되었습니다. 아래 절차를 따르세요. 참고로 이 절차는 관련된 토토 캔의 우선순위에 간접적으로 영향을 받습니다. 참조섹션 1.1.6더 많은 정보를 원하시면.

피토토 캔 유형 결정

  1. 다음에서 고려할 연산자를 선택하세요.pg_operator시스템 카탈로그. 규정되지 않은 운영자 이름을 사용하는 경우(일반적인 경우) 고려되는 연산자는 올바른 이름의 연산자이고 현재 검색 경로에 표시되는 인수 수 (참조섹션 2.8.3). 자격을 갖춘 운영자 이름이 제공된 경우에만 지정된 스키마의 토토 캔가 고려됩니다.

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

  2. 토토 캔가 입력을 정확하게 받아들이는지 확인하세요 인수 유형. 존재하는 경우(정확한 항목은 하나만 있을 수 있음) 고려된 토토 캔 집합과 일치하는 경우) 이를 사용하세요.

    1. 이진 연산자의 인수 중 하나가 다음과 같은 경우알 수 없음입력한 다음 동일하다고 가정합니다. 이 검사의 다른 인수로 입력하세요. 기타 사례 관련된알 수 없음결코 찾지 못할 것입니다 이 단계에서는 일치합니다.

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

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

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

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

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

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

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

예제 7-1. 지수 토토 캔 유형 해결

다음에는 지수 연산자가 하나만 정의되어 있습니다. 카탈로그이며 유형의 인수를 취합니다.더블 정밀도. 스캐너는 초기 유형을 할당합니다.정수이 쿼리의 두 인수 모두에 표현:

tgl= "Exp"로 2 ^ 3을 선택하세요.
 경험치
-----
   8
(1행)

그래서 파서는 피연산자와 피연산자 모두에 대해 유형 변환을 수행합니다. 쿼리는 다음과 같습니다.

tgl= SELECT CAST(2 AS 배정밀도) ^ CAST(3 AS 배정밀도) AS "Exp";
 경험치
-----
   8
(1행)

또는

tgl= 2.0 ^ 3.0 AS "Exp" 선택;
 경험치
-----
   8
(1행)

참고:이 마지막 양식은 오버헤드가 가장 적습니다. 암시적 유형을 수행하기 위해 함수가 호출되지 않기 때문에 전환. 이는 작은 쿼리에는 문제가 되지 않지만 관련된 쿼리 성능에 영향을 미칩니다. 큰 테이블.

예 7-2. 문자열 연결 토토 캔 유형 해결

문자열 유형 작업에 문자열과 유사한 구문이 사용됩니다. 복잡한 확장 유형으로 작업하는 경우에도 마찬가지입니다. 문자열 유형이 지정되지 않은 경우 가능성 있는 토토 캔와 일치됩니다. 후보자.

하나의 지정되지 않은 인수가 있는 예:

tgl= 'abc' 텍스트 선택 || 'def' AS "텍스트 및 알 수 없음";
 텍스트 및 알 수 없음
------------------
 abcdef
(1행)

이 경우 파서는 토토 캔가 있는지 확인합니다. 복용텍스트두 인수 모두에 대해. 이후 두 번째 인수는 다음과 같아야 한다고 가정합니다. 유형으로 해석됨텍스트.

지정되지 않은 유형에 대한 연결:

tgl= 'abc' 선택 || 'def' AS "지정되지 않음";
 지정되지 않음
-------------
 abcdef
(1행)

이 경우 사용할 유형에 대한 초기 힌트가 없습니다. 쿼리에 유형이 지정되지 않았기 때문입니다. 그래서 파서는 다음과 같이 보입니다. 모든 후보 연산자에 대해 후보가 있음을 찾습니다. 문자열 범주 및 비트 문자열 범주 입력을 모두 허용합니다. 가능한 경우 문자열 카테고리가 선호되므로 카테고리가 선택된 다음,"선호되는 유형"문자열의 경우,텍스트는 다음을 해결하기 위한 특정 유형으로 사용됩니다. 알 수 없는 리터럴입니다.

예 7-3. 절대값과 계승 운영자 유형 확인

포스트그레SQL토토 캔 카탈로그에는 접두사 토토 캔에 대한 여러 항목이 있습니다.@, 모두 절대값을 구현합니다. 다양한 숫자 데이터 유형에 대한 연산. 이 항목 중 하나 유형에 해당합니다.float8, 이는 숫자 카테고리에서 선호되는 유형입니다. 그러므로포스트그레SQL직면했을 때 해당 항목을 사용합니다 숫자가 아닌 입력으로:

tgl= @text '-4.5'를 "abs"로 선택합니다.
 복근
-----
 4.5
(1행)

여기서 시스템은 암시적 text-to-float를 수행했습니다8 선택한 연산자를 적용하기 전에 변환합니다. 우리는 확인할 수 있습니다 float8이 아닌 다른 유형이 사용되었습니다.

tgl= @text '-4.5e500'을 "abs"로 선택합니다.
오류: 입력 '-4.5e500'이 float8의 범위를 벗어났습니다.

반면에 후위 토토 캔!(계승)은 정수 데이터에 대해서만 정의됩니다. 유형은 float8이 아닙니다. 따라서 비슷한 사례를 시도하면!, 우리는 다음을 얻습니다:

tgl= 텍스트 '20'을 선택하세요! "계속"으로;
오류: 후위 연산자 '!'를 식별할 수 없습니다. '텍스트' 유형의 경우
        괄호나 명시적인 캐스트를 추가해야 할 수도 있습니다.

이것은 시스템이 다음 중 어느 것을 결정할 수 없기 때문에 발생합니다. 여러 개 가능!연산자는 다음과 같아야 합니다. 선호됩니다. 명시적인 캐스트를 통해 도움을 드릴 수 있습니다.

tgl= 선택 캐스트(text '20' as int8) ! "계속"으로;
      계승
--------
 2432902008176640000
(1행)