이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.503 메이저 토토 사이트 페치 실패버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.
포스트그레SQL
이전 제31장. SQL 확장: 스포츠 토토 다음

쿼리 언어(SQL) 기능

SQL 기본 유형에 대한 스포츠 토토

가장 간단한 SQL 스포츠 토토에는 인수가 없으며 단순히 int4와 같은 기본 유형을 반환합니다.

스포츠 토토 만들기 one() 반환 int4
     AS '결과로 1 선택' LANGUAGE 'sql';

    SELECT one() AS 답변;

         +---------+
         |대답 |
         +---------+
         |1 |
         +-------+

스포츠 토토에 대한 대상 목록을 정의했음을 주목하십시오( 이름은 RESULT)이지만 호출한 쿼리의 대상 목록은 스포츠 토토가 스포츠 토토의 대상 목록을 재정의했습니다. 따라서 결과는 하나 대신 라벨이 붙은 답변입니다.

기본 유형을 취하는 SQL 스포츠 토토를 정의하는 것은 거의 쉽습니다 인수로. 아래 예에서 우리가 어떻게 참조하는지 주목하세요. 스포츠 토토 내의 인수를 $1 및 $2로 지정합니다.

스포츠 토토 생성 add_em(int4, int4) 반환 int4
     AS '선택 $1 + $2;' 언어 'sql';

    SELECT add_em(1, 2) AS 답변;

         +---------+
         |대답 |
         +---------+
         |3 |
         +-------+

SQL 복합 유형의 스포츠 토토

복합 유형의 인수로 스포츠 토토를 지정할 때 (예: EMP) 원하는 인수를 지정해야 할 뿐만 아니라(예: 위에서는 $1 및 $2로 수행했지만 그 속성도 논쟁. 예를 들어, double_salary 스포츠 토토를 사용하면 당신의 급여가 두 배가 된다면 얼마나 될지 계산합니다.

CREATE FUNCTION double_salary(EMP) 반환 int4
     AS 'SELECT $1.급여 * 2 AS 급여;' 언어 'sql';

    SELECT 이름, double_salary(EMP) AS dream
     EMP에서
     EMP.dept = '장난감';

         +------+---------+
         |이름 | 꿈 |
         +------+---------+
         |샘 | 2400 |
         +------+---------+

$1.salary 구문 사용에 주목하세요. 런칭하기 전에 복합 유형을 반환하는 함수의 주제에 대해 먼저 설명해야 합니다. 속성 투영을 위한 함수 표기법을 소개합니다. 는 이를 설명하는 간단한 방법은 일반적으로 다음 표기법을 사용할 수 있다는 것입니다. attribute(class)와 class.attribute는 서로 바꿔서 사용할 수 있습니다.

--
    -- 이는 다음과 같습니다.
    -- EMP.name AS youngster FROM EMP WHERE EMP.age < 30을 선택하세요.
    --
    SELECT 이름(EMP) AS 어린아이
     EMP에서
     WHERE 연령(EMP) < 30;

         +----------+
         |젊은이 |
         +----------+
         |샘 |
         +----------+

그러나 우리가 보게 되겠지만 이것이 항상 그런 것은 아닙니다. 이 함수 표기법은 다음과 같은 함수를 사용하고자 할 때 중요합니다. 단일 인스턴스를 반환합니다. 우리는 전체를 조립하여 이를 수행합니다. 함수 내의 인스턴스, 속성별. 이것은 단일 EMP 인스턴스를 반환하는 함수의 예:

스포츠 토토 생성 new_emp() EMP를 반환합니다.
     AS 'SELECT \'None\'::text AS 이름,
      AS연봉 1000,
      25 AS나이,
      \'없음\'::char16 AS 부서;'
      언어 'sql';

이 경우 우리는 각 속성을 상수 값이지만 모든 계산이나 표현식은 이 상수로 대체되었습니다. 이와 같은 함수를 정의하면 까다로워. 더 중요한 주의사항 중 일부는 다음과 같습니다.

  • 대상 목록 순서는 다음과 정확히 동일해야 합니다. CREATE TABLE 문에 나타나는 속성(또는 .* 쿼리를 실행할 때).

  • 표현식(::을 사용하여)을 매우 신중하게 유형 변환해야 합니다. 그렇지 않으면 다음 오류가 표시됩니다.

    WARN::EMP 반환 유형으로 선언된 스포츠 토토는 검색하지 않습니다(EMP.*)
  • 인스턴스를 반환하는 함수를 호출할 때 우리는 전체 인스턴스를 검색합니다. 우리는 다음 중 하나를 계획해야 합니다. 인스턴스 밖으로 속성을 지정하거나 전체 인스턴스를 또 다른 기능.

    SELECT name(new_emp()) AS 없음;
    
                +---------+
                |아무도 |
                +---------+
                |없음 |
                +-------+
  • 일반적으로 스포츠 토토 구문을 사용해야 하는 이유 스포츠 토토 반환 값의 속성을 투영하는 방법은 파서는 다른 (점) 구문을 이해하지 못합니다. 스포츠 토토 호출과 결합될 때의 투영.

    SELECT new_emp().name AS none;
                경고:파서: "." 근처에 구문 오류가 있습니다.

SQL 쿼리 언어로 된 모든 명령 모음은 함께 패키지되어 함수로 정의됩니다. 명령은 다음과 같습니다. 업데이트(예: 삽입, 업데이트 및 삭제)를 포함하고 선택합니다. 쿼리. 그러나 최종 명령은 다음을 반환하는 선택이어야 합니다. 함수의 반환 유형으로 지정된 모든 것.

스포츠 토토 생성 clean_EMP () 반환 int4
     AS 'EMP.salary <= 0인 EMP에서 삭제;
    1을 무시로 선택'
     언어 'sql';

    SELECT clean_EMP();

         +--+
         |x |
         +--+
         |1 |
         +--+

이전 다음
SQL 확장: 기능 위로 프로그래밍 언어 기능