이 문서는 지원되지 않는 버전의 토토을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 젠 토토 생성버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

생성 깁스

이름

토토 만들기-새 토토 정의

시놉시스

CREATE CAST (source_typeastarget_type)
    함수function_name(argument_type[, ...])
    [과제 | 암시 적]

CAST CAST (source_typeastarget_type)
    기능없이
    [과제 | 암시 적]

CAST CAST (source_typeastarget_type)
    Inout과 함께
    [과제 | 암시 적으로]

설명

토토 만들기새 출연진을 정의합니다. 에이 토토 두 데이터 간의 변환을 수행하는 방법을 지정합니다. 유형. 예를 들어,

Cast (42 AS float8); 선택

정수 상수 42를 토토으로 변환float8이전에 지정된 기능을 호출하여 이 경우float8 (int4). (그렇지 않은 경우 적절한 토토가 정의되었고 전환이 실패합니다.)

두 가지 토토이 될 수 있습니다이진 강압, 이는 변환이 수행 될 수 있음을 의미합니다"무료"함수를 호출하지 않고. 이것 해당 값이 동일한 내부를 사용해야합니다 대표. 예를 들어, 토토텍스트andvarchar이진입니다 두 가지 방법을 강요 할 수 있습니다. 이진 강압은 반드시 a는 아닙니다 대칭 관계. 예를 들어, 토토XMLto텍스트수행 할 수 있습니다 현재 구현에서는 무료이지만 반대 방향 최소한 구문 검사를 수행하는 함수가 필요합니다. (둘 두 가지 방법 모두 이진을 강요하는 토토은 다음과 같이합니다. 이진 호환.)

토토를 A로 정의 할 수 있습니다I/O 변환 토토사용하여inout구문. I/O 변환 토토는 수행됩니다 소스 데이터 유형의 출력 기능 호출 및 전달 대상 데이터의 입력 함수에 대한 결과 문자열 유형. 많은 일반적인 경우,이 기능은 쓰기 할 필요가 없습니다. 변환을위한 별도의 토토 함수. I/O 변환 토토 일반 기능 기반 토토와 동일하게 작동합니다. 만 구현이 다릅니다.

기본적으로, 토토는 명시적인 토토에 의해서만 호출 될 수 있습니다. 요청, 그것은 명백한 것입니다cast (xastypename)또는x::typename구성.

토토가 표시된 경우과제값을 대상 데이터 토토의 열. 예를 들어, 그렇게 가정foo.f1토토의 열텍스트, 다음 :

foo (f1) 값 (42);에 삽입

유형에서 토토가 허용됩니다정수to Type텍스트표시과제, 그렇지 않으면. (우리 일반적으로 용어 사용과제 토토이런 종류의 토토를 설명하려면)

토토가 표시된 경우암시 적그러면 어떤 상황에서도 암시 적으로 호출 될 수 있습니다. 할당 또는 내부적으로 표현식. (우리는 일반적으로 사용합니다 용어암시 적 토토이런 종류를 설명합니다 예를 들어, 토토의.)이 쿼리를 고려하십시오.

2 + 4.0; 선택

파서는 처음에 상수를 유형으로 표시합니다Integerand숫자각각. 없음Integer + 숫자연산자 시스템 카탈로그에는가 있습니다.숫자 + 숫자운영자. 따라서 쿼리가 성공하면 성공합니다 에서 토토정수to숫자사용 가능하고 표시암시 적- 실제로. 파서는 할 것입니다 암시 적 토토를 적용하고 쿼리를 마치 마치 마치 쓴

CAST (2 AS 숫자) + 4.0; 선택

이제 카탈로그는에서 토토를 제공합니다.숫자toInteger. 만약 그렇다면 토토가 표시되었습니다암시 적- 그 그렇지 않습니다 - 그러면 파서는 위의 해석과 캐스팅의 대안숫자Constant to정수그리고 적용정수 + Integer운영자. 지식이 부족합니다 선호하는 선택, 쿼리를 포기하고 선언 할 것입니다. 모호한. 두 토토 중 하나만이 암시 적이라는 사실은 우리가 파서에게의 해상도를 선호하도록 가르치는 방식 혼합숫자-and-Integer표현 AS숫자; 그것에 대한 지식이 내장되어 있지 않습니다.

토토를 암시 적으로 표시하는 것에 대해 보수적 인 것이 현명합니다. 암시 적 주조 경로의 과잉이 유발할 수 있습니다토토놀라운 선택 명령 해석 또는 명령을 해결할 수 없도록 여러 가지 가능한 해석이 있기 때문에 전혀 없습니다. 에이 좋은 경험의 규칙 정보를 예방하는 유형 간의 변환 동일한 일반 유형 범주. 예를 들어, 토토int2toint4합리적으로 할 수 있습니다 암시 적이지만의 토토float8toint4아마도 과제 전용이어야합니다. 과 같은 크로스 토토 카테고리 토토텍스트toint4, 명시 적 전용이 가장 좋습니다.

참고 :때로는 유용성을 위해 필요합니다 표준 준수 이유 여러 가지 암시 적을 제공해야합니다 일련의 유형 중 하나를 토토하여 모호함을 초래합니다. 위와 같이 피할 수 없습니다. 파서에는 폴백이 있습니다 휴리스틱 기반토토 카테고리and선호 토토도움이 될 수 있습니다 그러한 경우에 원하는 행동을 제공하십시오. 보다토토 생성더 많은 정보.

토토를 만들 수 있으려면 출처 또는 대상 데이터 유형. 이진적 통합 토토를 만들려면해야합니다 슈퍼 유행자. (이 제한은 잘못 되었기 때문에 이루어집니다 이진 계약 토토 변환은 쉽게 충돌 할 수 있습니다 섬기는 사람.)

매개 변수

source_type

토토의 소스 데이터 유형의 이름.

target_type

토토의 대상 데이터 유형의 이름.

function_name(argument_type[, ...])

토토를 수행하는 데 사용되는 함수. 함수 이름 스키마 자격이 될 수 있습니다. 그렇지 않은 경우 기능이 있습니다 스키마 검색 경로에서 찾았습니다. 함수의 결과 데이터 유형은 토토의 대상 유형과 일치해야합니다. 그것은 논쟁은 아래에 설명되어 있습니다.

함수 없음

소스 토토이 이진을 통합 할 수 있음을 나타냅니다 대상 토토이므로 깁스.

inout

토토가 I/O 변환 토토임을 나타냅니다. 소스의 출력 함수를 호출하여 수행됩니다 데이터 유형 및 결과 문자열을 입력에 전달합니다. 대상 데이터 유형의 기능.

과제

토토가 암시 적으로 호출 될 수 있음을 나타냅니다 과제 컨텍스트.

암시 적

| 문맥.

토토 구현 함수는 1 ~ 3 개의 인수를 가질 수 있습니다. 첫 번째 인수 유형은 동일하거나 이진을 통합 할 수 있어야합니다. 토토의 소스 유형에서. 두 번째 논쟁, 존재한다면 유형이어야합니다Integer; 토토을받습니다 대상 토토과 관련된 수정 자,-1없는 경우. 세 번째 주장, if 현재, 토토이어야합니다부울; 수신true토토가 명시적인 토토 인 경우거짓그렇지 않으면. (기괴하게, SQL 표준은 명시적이고 암시적인 다른 행동을 요구합니다 경우에 따라 토토. 이 주장은 기능을 위해 제공됩니다 그러한 토토를 구현해야합니다. 디자인하는 것이 좋습니다 자신의 데이터 유형이 중요합니다.)

토토 함수의 반환 유형은 동일해야합니다. 토토의 대상 유형에 이진을 통합 할 수 있습니다.

일반적으로 토토는 다른 소스와 대상 데이터가 있어야합니다. 유형. 그러나 동일한 토토를 선언 할 수 있습니다. 출처 구현 기능이있는 경우 소스 및 대상 유형 하나 이상의 논쟁으로. 이것은 대표하는 데 사용됩니다 시스템 카탈로그에서 유형 별 길이 강요 기능. 명명 된 함수는 유형의 값을 두 번째 인수에 의해 주어진 유형 수정 자 값.

토토가 다른 소스와 대상 유형과 하나 이상의 논쟁을 취하는 함수는 지원합니다 한 유형에서 다른 유형으로 변환하고 길이를 적용합니다. 한 단계에서 강요. 그러한 항목이 없으면 유형 수정자를 사용하는 유형에 대한 강요에는 두 개의 토토가 포함됩니다. 단계, 하나는 데이터 유형간에 변환하고 1 초를 적용 할 수 있습니다. 수정 자.

노트

usePostgreSQL : 문서 : 9.1 : 드롭 토토제거하려면 사용자 정의 토토.

토토을 변환 할 수 있다면 두 가지를 기억하십시오. 두 가지 방법을 명시 적으로 선언 해야하는 방법.

일반적으로 토토를 만들 필요는 없습니다 사용자 정의 유형 및 표준 문자열 유형 (텍스트, Varcharchar (n)뿐만 아니라 문자열로 정의 된 사용자 정의 토토 범주).토토제공 자동 I/O 변환 토토. 자동 토토 문자열 유형은 과제 토토로 취급되는 반면 자동입니다. 문자열 유형의 토토는 명시 적 전용입니다. 이것을 무시할 수 있습니다 자동 토토를 대체하기 위해 자신의 토토를 선언함으로써 행동, 그러나 일반적으로 그렇게해야 할 유일한 이유는 당신이 원한다면 변환은 표준보다 쉽게 ​​호출 할 수 있습니다 할당 전용 또는 명시 적 전용 설정. 또 다른 가능한 이유 전환이 유형의 I/O 함수; 그러나 그것은 당신이 충분히 놀라운 일입니다 좋은 생각인지에 대해 두 번 생각해야합니다. (작은 내장 유형의 수에는 실제로 다른 동작이 있습니다. 변환의 경우 주로 SQL의 요구 사항 때문입니다 기준.)

이전토토22703_23148pg_cast

필요하지는 않지만 계속해서 토토 구현 이름 지정 의이 오래된 협약을 따르십시오 대상 데이터 유형 다음에 기능합니다. 많은 사용자가 익숙합니다 기능 스타일 표기법을 사용하여 데이터 유형을 토토 할 수 있습니다. 그게typename(x). 이 표기법은 사실 더 이상 아무것도 아닙니다 토토 구현 기능의 호출보다 적지도 않습니다. 그것은 특별히 토토로 취급되지 않았습니다. 전환 기능이있는 경우 이 컨벤션을 지원하도록 지명되지 않았다면 당신은 놀라게 될 것입니다 사용자. 부터토토허용 인수가 다른 동일한 함수 이름의 과부하 유형, 다중 변환에 어려움이 없습니다 모두 대상 유형을 사용하는 다른 유형의 기능 이름.

참고 :실제로 앞의 단락은 an입니다 지나치게 단순화 : 두 가지 사례가 있습니다 함수 통신 구조는 토토 요청으로 취급됩니다 실제 기능과 일치하지 않고. 경우 a 함수 호출이름(x)는 기존과 정확히 일치하지 않습니다 기능이지만이름입니다 데이터 유형의 이름 및PG_CAST유형 에서이 유형에 이진적으로 강화 가능한 토토를 제공합니다. 의x이진적 통합 토토로 해석됩니다. 이 예외는 이루어집니다 이진 통합 토토를 사용하여 호출 할 수 있습니다 기능 구문은 기능이 부족하지만. 마찬가지로, 없다면pg_cast입장이지만 토토는 문자열 유형 또는 통화는 I/O 변환 토토로 해석됩니다. 이것 예외를 사용하면 I/O 변환 토토를 사용하여 호출 할 수 있습니다 기능 구문.

참고 :예외에 대한 예외도 있습니다. 복합 유형에서 문자열 유형으로의 I/O 변환 토토 기능 구문을 사용하여 호출 할 수는 없지만 있어야합니다 명시 적 토토 구문으로 작성 (aight토토또는::표기법). 이 예외는 도입 후 추가되었습니다 자동으로 제공되는 I/O 변환 토토도 발견되었습니다 기능이 있거나 칼럼 참조가 의도되었습니다.

Type에서 할당 토토를 작성하려면bigintto Typeint4사용 기능int4 (bigint):

함수 int4 (bigint)가 할당 된 Cast (bigint as int4) 만들기;

(이 토토는 이미 시스템에서 사전 정의되어 있습니다.)

호환성

the토토 만들기명령을 준수합니다 그만큼SQL표준을 제외하고 SQL 구현 기능에 대한 인수.AS 절대적인is토토확장도.