이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 41.11. 범퍼카 토토/PGSQL 아래의 후드버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

38.10. pl/pgsql아래 후드

이 섹션에서는 일부 구현 세부 정보에 대해 설명합니다pl/pgsql사용자가 알고 있습니다.

38.10.1. 변수 대체

언제pl/pgsql준비 apl/pgsql가변 이름이 나타납니다$n.

함수 생성 logfunc (logtxt 텍스트)는 void를 $$로 반환합니다

the삽입성명서

준비station_name(텍스트, 타임 스탬프) AS

각 실행에 따라execute의 현재 실제 값과 함께와이즈 토토 : 문서 : 8.3 : execute명령, 아님pl/pgsql'sexecute.)

대체이것은 다양한 트랩을 포즈합니다logtable열 이름이 있습니다logtxtandlogtime, 그리고 우리는를 쓰려고 노력합니다.삽입as

logtable (logtxt, logtime) 값 (logtxt, curtime)에 삽입;

이것은 기본 SQL 파서에게 공급됩니다

Logtable ($ 1, logtime) 값 ($ 1, $ 2)에 삽입;

다음과 같은 구문 오류가 발생합니다.

오류 : "$ 1"또는 근처의 구문 오류

이 예제는 진단하기 쉽습니다.

선언

그리고 왜 그의 모든 테이블 항목이 무효 인 것처럼 보이는지 궁금했습니다. 의

key = $ 2 테이블에서 $ 1을 선택하십시오.

따라서 그것은 단지 비싼 할당 방법이었습니다val의 현재 값은 그 자체로 돌아 왔습니다

그러한 함정을 피하기위한 일반적으로 사용되는 코딩 규칙은 다음과 같습니다.pl/pgsql테이블에 사용하는 것보다 변수V_뭔가당신의 테이블은 없지만V_, 당신은입니다

또 다른 해결 방법은 자격을 갖춘 (점선) 이름을 사용하는 것입니다

select table의 val의 경우 key = search_key loop ... 테이블에서 val.

왜냐하면pl/pgsql그렇지 않습니다삽입's

당신이 사용할 수있는 또 다른 기술은 라벨을섹션 38.2). 예를 들어,

<< pl 

이것은 그 자체로 문제에 대한 해결책이 아닙니다."잘못된"웨이. 그러나 명확히하는 데 유용합니다

명령 문자열에서 변수 대체가 발생하지 않습니다execute또는 그 중 하나섹션.

가변 대체는 현재에서만 작동합니다select,삽입,업데이트삭제기본 SQL 엔진이기 때문에 명령executeit.

38.10.2. 캐싱 계획

thepl/pgsql통역사pl/pgsql진술SQL표현 및SQL함수에 사용 된 명령은 그렇지 않습니다

각 표현식 및SQL명령에서 처음 실행됩니다pl/pgsql통역사는 준비된 실행 계획을 만듭니다 (사용SPI관리자SPI_PREPAREandSPI_SAVEPLAN함수).그 표현을 후속 방문 또는pl/pgsql함수. 단점은 그게됩니다

한 번pl/pgsql

create function populate () 정수를 $$로 반환합니다

위의 함수를 실행하면 OID를 참조합니다.my_function ()in공연진술. 나중에 떨어지면my_function (),populate ()할 수 없습니다my_function ()더 이상. 너populate ()가 컴파일됩니다함수 생성 또는 교체정의를 업데이트 할 때my_function, 함수가있을 때"대체", 그 OID는 아닙니다

참고 :inPostgreSQL8.3 이상, 계획을 저장했습니다

때문에pl/pgsql저장pl/pgsql함수가 있어야합니다pl/pgsql execute성명서 - 새로운 실행 계획을 세우는 대가로

또 다른 중요한 요점은 준비된 계획이라는 것입니다PL/PGSQL한 번의 사용에서 변경되는 변수

선택 * 사전에서 Myrec에 * search_term;

여기서search_termispl/pgsql변수. 캐시 된 계획Word, 플래너는 그것을 가정 할 수 없기 때문에좋아요패턴은 좌회전됩니다좋아요패턴execute새로운 계획을 강요하는 데 사용될 수 있습니다.

레코드 변수의 변이 가능한 특성은 다른 것을 제시합니다execute이 주위를 돌리는 데 사용될 수 있습니다

동일한 함수가 둘 이상의 트리거로 사용되는 경우pl/pgsql준비 및다른 유형이 다른 경우에도

마찬가지로, 다형성 인수 유형을 갖는 기능에는 a가 있습니다

계획 캐싱은 때때로 놀라운 영향을 미칠 수 있습니다

함수 생성 logfunc1 (logtxt 텍스트)은 $$로 void를 반환합니다

및 :

함수 생성 logfunc2 (logtxt 텍스트)는 void를 $$로 반환합니다

의 경우logfunc1,PostgreSQLMain Parser는 알고 있습니다삽입그 문자열'now'타임 스탬프logtable'지금'삽입가 계획된 다음 모든 것에 사용됩니다logfunc1

의 경우logfunc2, ThePostgreSQL메인 파서가합니다'now'텍스트문자열 포함now. 다음으로 현지인에게 임무를 수행하는 동안CURTIME, Thepl/pgsql통역사는이 문자열을 캐스트합니다타임 스탬프전화하여 타이핑text_outtimeStamp_in변환 기능.