이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 10.2. 토토 캔 결과버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

7.2. 연산자

운영자 호출의 피연산자 유형이 해결됩니다 아래 절차에 따라. 이 절차는 다음과 같습니다 관련 연산자의 우선 순위에 의해 간접적으로 영향을받습니다. 보다섹션 1.1.6자세한 내용은

오페라 타입 해상도

  1. pg_operator시스템 카탈로그. 자격이없는 토토 캔 이름이 사용되는 경우 (일반적인 경우) 고려 된 운영자는 올바른 이름이며 현재 검색 경로에서 볼 수있는 인수 수 (보다섹션 2.8.3). 자격을 갖춘 운영자 이름이 주어진 경우에만 지정된 스키마의 토토 캔가 고려됩니다.

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

  2. 입력을 정확하게 수락하는 토토 캔를 확인하십시오 인수 유형. 하나가 존재하는 경우 (정확한 하나만있을 수 있습니다 고려 된 운영자 세트에서 일치), 사용하십시오.

    1. 이진 토토 캔의 하나의 인수가알 수없는유형이 동일하다고 가정합니다 이 점검의 다른 주장으로 입력하십시오. 다른 경우 관련알 수없는결코 찾을 수 없습니다 이 단계에서의 일치.

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

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

    2. 모든 후보자를 통해 그와 함께 보관하십시오 입력 유형에서 가장 정확한 일치. 모든 후보자를 유지하십시오 정확히 일치하는 사람이없는 경우. 한 후보자 만 있다면 남아 있습니다. 그렇지 않으면 다음 단계로 계속됩니다.

    3. 모든 후보자를 통해 그와 함께 보관하십시오 입력 유형에서 가장 정확하거나 이진 호환 일치. 정확한 또는 정확한 사람이없는 경우 모든 후보자를 유지하십시오 이진 호환 일치. 한 후보자 만 있다면 남아 있습니다. 그렇지 않으면 다음 단계로 계속됩니다.

    4. 모든 후보자를 통해 실행하여 그를 유지하십시오 유형의 대부분의 위치에서 선호되는 유형을 허용합니다 강요가 필요합니다. 모든 후보자를 보관하십시오 선호하는 유형을 허용합니다. 한 후보 만 남아있는 경우 그것을 사용하십시오; 그렇지 않으면 다음 단계로 계속됩니다.

    5. 입력 인수가있는 경우"알 수없는", 유형 범주를 확인하십시오 나머지는 그 주장 위치에서 받아 들여다 후보자. 각 위치에서 "문자열"을 선택하십시오. 카테고리 후보자가 해당 범주를 수락하는 경우 (이 문자열에 대한 바이어스는 an. 이후로 적절하다 알 수없는 유형의 리터럴은 문자열처럼 보입니다). 그렇지 않으면 나머지 후보자가 모두 수락하는 경우 동일한 유형 카테고리, 해당 범주를 선택하십시오. 그렇지 않으면 올바른 선택은 추론 할 수 없기 때문에 실패합니다 더 많은 단서없이. 또한 응시자는 다음에 선호되는 데이터 유형을 수락합니다 선택된 카테고리. 이제 운영자 후보를 폐기하십시오 선택한 유형 범주를 허용하지 마십시오. 뿐만 아니라, 후보자가 주어진에서 선호하는 유형을 수락하는 경우 인수 위치, 받아들이는 후보자를 버립니다 그 주장에 대한 선호되지 않은 유형.

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

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

에 정의 된 지수 토토 캔는 하나뿐입니다 카탈로그, 그리고 유형의 주장이 필요합니다더블 정도. 스캐너는 초기 유형의를 할당합니다.Integer이 쿼리의 두 인수 모두 표현:

tgr = "exp"로 2 ^ 3을 선택합니다.
 exp
-----
   8
(1 행)

따라서 파서는 피토토 캔와 모두 오 피연록과 유형 변환을 수행합니다. 쿼리는와 같습니다.

TGL = CAST (2로 이중 정밀도) ^ 캐스트 (3은 이중 정밀도) "Exp"로서;
 exp
-----
   8
(1 행)

또는

TGL = SELECT 2.0 ^ 3.0 AS "EXP";
 exp
-----
   8
(1 행)

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

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

문자열과 같은 구문은 문자열 유형으로 작업하는 데 사용됩니다. 복잡한 확장 유형으로 작업 할뿐만 아니라 문자열 지정되지 않은 유형의 경우 작업자와 일치합니다 후보자.

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

TGL = 텍스트 'ABC'||를 선택하십시오 '텍스트와 알 수없는'으로 'def';
 텍스트와 알 수없는
-----------------
 ABCDEF
(1 행)

이 경우 파서는 운영자가 있는지 확인합니다. 취득텍스트두 인수 모두. 부터 두 번째 주장은 유형으로 해석텍스트.

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

TGL = 'ABC'||를 선택하십시오 "지정되지 않은"로서의 'def';
 지정되지 않은
-------------
 ABCDEF
(1 행)

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

예 7-3. 절대 가치와 계승 토토 캔 유형 해상도

thepostgresql운영자 카탈로그에는 접두사 토토 캔에 대한 여러 항목이 있습니다@, 모두 절대 값을 구현합니다 다양한 숫자 데이터 유형에 대한 작업. 이 항목 중 하나 유형입니다float8숫자 카테고리에서 우선 유형. 그러므로,PostgreSQL직면했을 때 해당 항목을 사용합니다 수치가 아닌 입력 :

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

여기서 시스템은 암시 적 텍스트-플로트 8을 수행했습니다 선택한 연산자를 적용하기 전에 변환. 우리는 확인할 수 있습니다 그 float8과 다른 유형이 사용되지 않았습니다.

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

반면, 포스트 픽스 토토 캔!(Factorial)는 정수 데이터에 대해서만 정의됩니다 float8에 대한 유형. 그래서 우리가 비슷한 사례를 시도하면!, 우리는 다음을 얻습니다 :

TGL = 텍스트 '20'을 선택하십시오! "Factorial"으로서;
오류 : 포스트 픽스 연산자를 식별 할 수 없습니다! ' '텍스트'유형
        괄호 나 명시 적 캐스트를 추가해야 할 수도 있습니다

이것은 시스템이 어느 쪽을 결정할 수 없기 때문에 발생합니다. 몇 가지 가능한!운영자가 있어야합니다 우선의. 우리는 명시적인 캐스트로 그것을 도울 수 있습니다 :

TGL = CAST를 선택하십시오 (텍스트 '20'AS int8)! "Factorial"으로서;
      계승
--------------------
 2432902008176640000
(1 행)