이 문서는 지원되지 않는 버전의 Postgre토토을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다무지개 토토 : 문서 : 17 : 41 장. PL/PGSQL - SQL 절차 언어버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

37 장pl/pg토토 - 토토절차 언어

pl/pg토토로드 가능합니다 에 대한 절차 언어Postgre토토데이터베이스 시스템. 디자인 목표 의pl/pg토토a 로드 가능한 절차 적 언어

  • 함수 및 트리거를 작성하는 데 사용될 수 있습니다 절차,

  • 제어 구조 추가토토언어,

  • 복잡한 계산을 수행 할 수 있습니다.

  • 모든 사용자 정의 유형, 함수 및 운영자,

  • 서버에서 신뢰할 수 있도록 정의 할 수 있습니다.

  • 사용하기 쉽습니다.

37.1. 개요

thepl/pg토토전화 처리기 함수의 소스 텍스트를 구문 분석하고 내부를 생성합니다 이진 명령 트리 기능이 처음으로 호출되는 경우 (각 세션 내에서). 지침 트리는 완전히 번역됩니다 그만큼pl/pg토토진술 구조이지만 개인토토표현 및토토함수에 사용 된 명령은 그렇지 않습니다 즉시 번역.

각 표현 및토토명령은 기능에 처음 사용됩니다. 그만큼pl/pg토토통역사 준비된 실행 계획을 만듭니다 (사용SPI관리자SPI_PREPAREandSPI_SAVEPLAN함수).그 표현을 후속 방문 또는 준비된 계획을 재사용하십시오. 따라서 기능 많은 진술을 포함하는 조건부 코드 실행 계획이 필요할 수 있습니다. 평생 동안 실제로 사용되는 계획 데이터베이스 연결. 이것은 총계를 실질적으로 줄일 수 있습니다 구문 분석하고 실행 계획을 생성하는 데 필요한 시간 A의 진술을 위해pl/pg토토함수. 단점은 그게됩니다 특정 표현식 또는 명령의 오류는 감지되지 않을 수 있습니다. 함수의 해당 부분이 실행 중에 도달 할 때까지.

한 번pl/pg토토함수의 특정 명령에 대한 실행 계획은 데이터베이스 연결의 수명에 대한 계획을 재사용하십시오. 이것 일반적으로 성능의 승리이지만 일부는 문제 데이터베이스 스키마를 동적으로 변경하는 경우. 을 위한 예:

함수 create populate () 정수를 반환합니다.
선언하다
    - 선언
시작하다
    my_function ()을 수행하십시오.
끝;
'언어 plpgsql;

위 함수를 실행하면 OID를 참조합니다. 을 위한my_function ()in 에 대한 실행 계획공연진술. 나중에 떨어지면 재현my_function (), 그때populate ()할 수 없습니다 찾다my_function ()더 이상. 너 그런 다음 재현해야 할 것입니다populate ()또는 적어도 새 데이터베이스를 시작하십시오 세션이 새로 컴파일되도록 세션. 또 다른 방법 이 문제는 사용하는 것입니다생성 또는 기능 교체정의를 업데이트 할 때my_function(함수가있을 때"대체", 그 OID는 아닙니다 변경).

때문에pl/pg토토저장 이러한 방식으로 실행 계획, 직접 나타나는 토토 명령 에서pl/pg토토함수가 있어야합니다 모든 실행에서 동일한 테이블과 열을 참조하십시오. 저것 매개 변수를 테이블 또는 열의 이름으로 사용할 수 없습니다. 토토 명령에서. 이 제한을 해결하려면 가능합니다 를 사용하여 동적 명령 구성pl/pg토토 execute성명서 --- 새로운 실행 계획을 세우는 대가로 모든 실행에.

참고 :thepl/pg토토 execute진술은와 관련이 없습니다executePostgre토토서버. 그만큼 서버execute진술은 할 수 없습니다 내에서 사용PL/PG토토기능 (필요하지 않음).

입력/출력 변환 및 계산 기능을 제외하고 사용자 정의 유형의 경우 C에서 정의 할 수있는 모든 것 언어 기능은 또한로 수행 할 수 있습니다.pl/pg토토. 예를 들어 가능합니다 복잡한 조건부 계산 기능을 작성하고 나중에 사용하십시오 연산자를 정의하거나 색인 표현식으로 사용합니다.

37.1.1. 사용의 장점pl/pg토토

토토IS THE LANGUAGEPostgre토토(그리고 대부분의 다른 관계형 데이터베이스) 쿼리 언어로 사용하십시오. 휴대용입니다 배우기 쉽습니다. 하지만 모든토토명령문을 실행해야합니다 데이터베이스 서버에 의해 개별적으로.

이는 고객 신청서가 각각을 보내야 함을 의미합니다 데이터베이스 서버에 대한 쿼리, 처리 될 때까지 기다리십시오. 결과를 받고 계산을 수행 한 다음 다른 사람을 보내십시오 서버에 대한 쿼리. 이 모든 것은 간호사를 발생시킵니다 커뮤니케이션 및 귀하의 경우 네트워크 오버 헤드가 발생할 수 있습니다 클라이언트는 데이터베이스와 다른 컴퓨터에 있습니다 섬기는 사람.

withpl/pg토토할 수 있습니다 그룹 A 계산 블록 및 일련의 쿼리내부데이터베이스 따라서 절차 언어의 힘을 갖는 서버와 토토 사용의 용이성이지만 많은 시간을 절약합니다. 전체 클라이언트/서버 통신 오버 헤드가 없습니다. 이것은 상당한 성능 증가를 만들 수 있습니다.

withpl/pg토토당신 모든 데이터 유형, 운영자 및 기능을 사용할 수 있습니다. 토토.

37.1.2. 뒷받침 된 주장과 결과 데이터 유형

pl/pg토토인수로 받아 들일 수 있습니다 서버에서 지원하는 스칼라 또는 배열 데이터 유형 이러한 유형의 결과를 반환 할 수 있습니다. 그들은 또한 할 수 있습니다 지정된 복합 유형 (행 유형)을 수락하거나 반환합니다. 이름. 선언하는 것도 가능합니다pl/pg토토반환으로 기능레코드열이 사양에 따라 결정되는 행 유형 호출 쿼리,섹션 7.2.1.4.

pl/pg토토함수는 할 수 있습니다 또한 다형성 유형을 받아들이고 반환하도록 선언 됨AnylementAnyArray. a 다형성 기능은 통화마다 다를 수 있습니다. 안에섹션 33.2.5. 예제가에 표시됩니다.섹션 37.4.1.

PL/PG토토함수는 할 수 있습니다 또한 반품으로 선언 됨"set"또는 테이블은 할 수있는 모든 데이터 유형입니다 단일 인스턴스를 반환하십시오. 이러한 기능은 그 기능을 생성합니다 실행하여 출력다음 반환결과 세트의 원하는 각 요소.

드디어, aPL/PG토토함수는 반환으로 선언 될 수 있습니다void유용한 반환 값이없는 경우