이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다사설 토토 42 |_1 |04버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

10.3. 토토 커뮤니티

함수 호출에 의해 참조되는 특정 함수는 다음과 같습니다. 다음 절차를 사용하여 결정.

함수 유형 해상도

  1. 에서 고려할 함수를 선택하십시오PG_PROC시스템 카탈로그. 경우 a 비 스키마 자격이없는 함수 이름이 사용되었습니다 일치하는 이름과 인수 수는 현재 검색 경로에서 볼 수 있습니다 (참조섹션 5.7.3). 경우 a 자격을 갖춘 토토 커뮤니티 이름이 주어졌으며 지정된 토토 커뮤니티 만 스키마가 고려됩니다.

    1. 검색 경로에서 동일의 여러 토토 커뮤니티을 찾는 경우 인수 유형은 길에서 가장 오래된 것만 존경받는. 다른 인수 유형의 토토 커뮤니티이 고려됩니다 검색 경로 위치에 관계없이 동일한 기초.

    2. 함수가 a로 선언 된 경우variadic배열 매개 변수 및 호출이 사용되지 않습니다 그만큼variadic키워드, 그 기능은입니다 배열 매개 변수가 하나 이상으로 대체 된 것처럼 처리 통화와 일치하는 데 필요한 요소 유형의 발생. 후에 이러한 확장 기능은 효과적인 인수 유형을 가질 수 있습니다 비 전환 기능과 동일합니다. 이 경우 기능 검색 경로의 앞부분에서 나타나거나 두 사람이 함수는 동일한 스키마에 있으며, 비 변환은 다음과 같습니다. 우선의.

      이것은 자격을 갖춘 이름을 통해 호출 할 때 보안 위험을 초래합니다[1], a 신뢰할 수없는 사용자가 개체를 만듭니다. 악의적 인 사용자는 제어하고 실행할 수 있습니다 임의의 SQL 토토 커뮤니티은 마치 실행 된 것처럼 토토 커뮤니티합니다. 대체 a 부담 전화variadic키워드 이 위험을 우회합니다. 전화variadic "어느"매개 변수는 종종 동등한 제형이 없습니다 포함variadic키워드. 발행 이러한 호출은 안전하게 전화를 걸고 토토 커뮤니티의 스키마는 신뢰할 수있는 경우 만 허용해야합니다. 객체 생성 사용자.

    3. 매개 변수에 대한 기본값이있는 함수가 고려됩니다 기본값 중 0 이상을 생략하는 통화에 맞추기 위해 매개 변수 위치. 둘 이상의 토토 커뮤니티이 호출과 일치하면 검색 경로에서 가장 초기에 나타나는 사람이 사용됩니다. 있다면 동일한 스키마에서 동일한 스키마에서 두 개 이상의 토토 커뮤니티 지각되지 않은 위치의 매개 변수 유형 (가능합니다 기본 기본 매개 변수 세트가 다른 경우 시스템 선호하는 사람을 결정할 수 없으며"모호한 토토 커뮤니티 호출"오류가 발생합니다 결과 호출에 더 잘 일치하지 않으면 결과를 찾을 수 있습니다.

      이것은 자격을 통해 전화 할 때 가용성 위험을 초래합니다 이름[1], 스키마에서 발견 된 모든 함수 신뢰할 수없는 사용자가 객체를 생성 할 수 있습니다. 악의적 인 사용자는 할 수 있습니다 기존 함수의 이름으로 함수를 만듭니다. 그 함수의 매개 변수를 복제하고 소설을 추가합니다 기본값이있는 매개 변수. 이것은 새로운 전화를 방해합니다 원래 토토 커뮤니티. 이 위험을 막기 위해 토토 커뮤니티을 배치하십시오 신뢰할 수있는 사용자 만 물체를 만들도록 허용하는 스키마.

  2. 입력 인수 유형을 정확히 수락하는 함수를 확인하십시오. 하나가 존재하는 경우 ( 고려 된 토토 커뮤니티), 사용하십시오. 정확히 일치가 부족합니다 자격있는 이름을 통해 전화시 보안 위험[1], 스키마에서 발견 된 함수 신뢰할 수없는 사용자가 객체를 생성 할 수 있습니다. 그러한 상황에서 캐스트 정확히 일치하는 주장. (관련된 사례알 수없는이 단계에서 일치를 찾지 못할 것입니다.)

  3. 정확히 일치하지 않으면 함수 호출이 나타나는지 확인하십시오. 특수 유형 변환 요청이 되십시오. 기능이 발생합니다 호출은 하나의 인수 만 가지고 있으며 함수 이름은 다음과 같습니다. (내부) 일부 데이터 유형의 이름. 또한 기능 인수는 알려지지 않은 문자 그대로 또는 유형이어야합니다. 이름이 지정된 데이터 유형 또는 유형에 이진을 부과 할 수 있습니다. 해당 유형의 I/O를 적용하여 명명 된 데이터 유형으로 변환 함수 (즉, 변환은 표준 문자열 유형). 이러한 조건이 충족되면 기능이 있습니다 전화는의 형태로 취급됩니다.캐스트사양.[2]

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

    1. 입력 유형이하지 않는 후보 함수 폐기 일치하며 (암시 적 변환 사용) 변환 할 수 없습니다. 성냥.알 수없는리터럴이 가정됩니다 이 목적을 위해 무엇이든 전환 할 수 있습니다. 한 후보자 만 있다면 남아 있습니다. 그렇지 않으면 다음 단계로 계속됩니다.

    2. 입력 인수가 도메인 유형 인 경우 모든 후속 단계에 대한 도메인의 기본 유형. 이것은 그것을 보장합니다 도메인은 목적을 위해 기본 유형처럼 작용합니다 모호한 토토 커뮤니티 해상도.

    3. 모든 후보자를 통해 가장 정확한 후보자를 유지하십시오. 입력 유형에서 일치합니다. 정확히없는 경우 모든 후보자를 유지하십시오 성냥. 한 명의 후보 만 남아 있으면 사용하십시오. 그렇지 않으면 계속 다음 단계.

    4. 모든 후보자를 통해 선호하는 후보자를 유지하십시오. 입력 데이터 유형의 유형 카테고리의 유형 유형 변환이 필요한 위치. 모든 것을 유지하십시오 후보자가 선호하는 유형을 허용하지 않으면 후보자. 한 후보자 만 있다면 남아 있습니다. 그렇지 않으면 다음 단계로 계속됩니다.

    5. 입력 인수가있는 경우알 수없는, 확인 해당 인수 위치에서 수용된 유형 범주는 남은 후보자. 각 위치에서를 선택하십시오.String카테고리 후보자가 해당 범주를 수락하는 경우. (문자열에 대한이 편견은 알려지지 않은 유형 이후로 적절합니다 문자 그럴은 문자열처럼 보입니다.) 그렇지 않으면 나머지는 모두 응시자는 동일한 유형 범주를 수락하고 해당 범주를 선택하십시오. 그렇지 않으면 올바른 선택은없이 추론 할 수 없기 때문에 실패합니다. 더 많은 단서. 이제 선택된 것을 수락하지 않는 후보자를 버립니다 유형 카테고리. 또한 후보자가 선호하는 경우 해당 카테고리를 입력하고 선호되지 않은 수락 된 후보자를 버립니다 그 주장에 대한 유형. 아무도 살아남지 못하면 모든 후보자를 유지하십시오 테스트. 한 명의 후보 만 남아 있으면 사용하십시오. 그렇지 않으면 계속 다음 단계.

    6. 둘 다있는 경우알 수없는및 알려진 유형 인수와 모든 알려진 유형의 인수는 동일한 유형을 가지고 있습니다. 가정알 수없는인수도 있습니다 해당 유형을 확인하고에서 해당 유형을 수락 할 수있는 후보자를 확인하십시오.알 수없는-경사 위치. 정확히 하나라면 후보자는이 테스트를 통과하여 사용합니다. 그렇지 않으면 실패합니다.

"Best Match"규칙은입니다 작업자 및 토토 커뮤니티 유형 해상도와 동일합니다. 몇 가지 예 따르다.

예 10-6. 반올림 함수 인수 유형 해결

하나만 있습니다라운드함수 그것은 두 가지 논쟁을 취합니다. 유형의 첫 번째 논쟁이 필요합니다숫자그리고 유형의 두 번째 인수Integer. 따라서 다음 쿼리가 자동으로 유형의 첫 번째 인수를 변환Integerto숫자:

선택 라운드 (4, 4);

 둥근
--------
 4.0000
(1 행)

그 쿼리는 실제로 파서에 의해 :으로 변환됩니다.

원형 (캐스트 (4 숫자), 4); 선택

소수점이있는 숫자 상수가 처음이므로 유형 할당숫자, 다음 쿼리는 유형 변환이 필요하지 않으므로 약간 더 효율적인 :

Round (4.0, 4); 선택

예 10-7. 변수 토토 커뮤니티 해상도

function public.variadic_example (variadic numeric [])을 int를 반환합니다
  언어 SQL 'SELECT 1';
기능 만들기

이 함수는 변수를 받아들이지 만 필요하지 않습니다 예어. 정수와 숫자 인수를 모두 허용합니다.

public.variadic_example (0),
       public.variadic_example (0.0),
       public.variadic_example (variadic array [0.0]);
 variadic_example | variadic_example | variadic_example
-----------------+------------------------------------------
                1 |                1 |                1
(1 행)

그러나 첫 번째 및 두 번째 통화는보다 특정한 것을 선호합니다 사용 가능한 경우 토토 커뮤니티 :

기능 생성 public.variadic_example (숫자) int를 반환합니다
  'SELECT 2'로 언어 SQL;
기능을 만듭니다

function public.variadic_example (int) int를 반환합니다
  언어 SQL 'SELECT 3';
기능을 만듭니다

public.variadic_example (0)을 선택하십시오.
       public.variadic_example (0.0),
       public.variadic_example (variadic array [0.0]);
 variadic_example | variadic_example | variadic_example
-----------------+------------------------------------------
                3 |                2 |                1
(1 행)

기본 구성과 첫 번째 함수 만 제공됩니다 기존의 첫 번째 및 두 번째 통화는 불안합니다. 모든 사용자가 할 수 있습니다 두 번째 또는 세 번째 함수를 만들어 가로 릅니다. 에 의해 인수 유형을 정확하게 일치시키고 사용variadic키워드, 세 번째 호출은 안전합니다.

예 10-8. 하위 문자열 토토 커뮤니티 유형 해상도

몇 가지가 있습니다substr함수, 그 중 하나는 유형을 취합니다텍스트and정수. 문자열 상수로 호출 된 경우 지정되지 않은 유형, 시스템은 후보 토토 커뮤니티을 선택합니다 선호하는 카테고리의 주장을 받아들입니다String(즉, 유형텍스트).

SELECT SUBSTR ( '1234', 3);

 기판
--------
     34
(1 행)

문자열이 유형으로 선언 된 경우varchar, 테이블에서 나오는 경우와 마찬가지로. 그런 다음 파서는 그것을 변환하려고 시도합니다텍스트:

SELECT SUBSTR (Varchar '1234', 3);

 기판
--------
     34
(1 행)

이것은 파서에 의해 효과적으로되는 것으로 변환됩니다 :

SELL SELECT SEPTRT (Cast (Varchar '1234'as Text), 3);

참고 :파서는에서 배웁니다pg_cast카탈로그텍스트andVarchar이진 호환성이 있습니다 하나는 다른 하나를 받아들이는 토토 커뮤니티으로 전달 될 수 있습니다. 물리적 전환을 수행합니다. 따라서 유형 변환 호출이 없습니다 이 경우 실제로 삽입됩니다.

그리고 함수가 유형의 인수로 호출되는 경우Integer, 파서는이를 변환하려고합니다 에게텍스트:

SELECT SUBSTR (1234, 3);
오류 : 함수 서브 (정수, 정수)가 존재하지 않습니다
힌트 : 주어진 이름과 인수 유형과 일치하지 않습니다. 필요할 수도 있습니다
명시 적 유형 캐스트를 추가하려면

이것은 작동하지 않기 때문에정수암시 적 캐스트가 없음텍스트. an 그러나 명시 적 캐스트는 작동합니다 :

SELECT SEPSTR (Cast (1234 AS 텍스트), 3);

 기판
--------
     34
(1 행)

노트

[1]

위험이 비 스키마 자격이없는 이름으로 발생하지 않습니다. 신뢰할 수없는 스키마를 포함하는 검색 경로 객체를 만드는 사용자는보안 스키마 사용 무늬.

[2]

이 단계의 이유는 기능 스타일 캐스트를 지원하는 것입니다. 실제 캐스트 기능이없는 경우 사양. 캐스트 기능이있는 경우 일반적으로 그 이름을 따서 명명되었습니다. 출력 유형이므로 특별한 경우가 필요하지 않습니다. 보다PostgreSQL : 문서 : 9.3 : 토토 꽁 머니 만들기추가 해설.