이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다토토 사이트 추천 : 문서 : 17 : 41.4. 토토 결과버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

37.5. 토토 결과

모든 토토 결과식에 사용 된pl/pgsql진술은 다음을 사용하여 처리됩니다 서버의 일반SQL집행자. 상수를 포함하는 것으로 보이는 토토 결과은 실제로 필요할 수 있습니다. 런타임 평가 (예 :'now'타임 스탬프type) 따라서이 불가능합니다.pl/pgsql실제 식별을위한 파서 키 단어 이외의 상수 값null. 모든 토토 결과식은 내부적으로 평가됩니다 쿼리 실행

select토토 결과

사용SPI관리자. 을 위한 평가, 발생pl/pgsql가변 식별자가 교체됩니다 매개 변수 및 변수의 실제 값은 매개 변수 배열에서 집행자에게 전달되었습니다. 이것은 허용합니다 쿼리 계획select준비하려면 한 번만 후속 평가를 위해 재사용했습니다.

에 의해 수행 된 평가PostgreSQL메인 파서에는 부작용이 있습니다 일정한 값의 해석에. 세부적으로 a 이 두 기능의 차이점 :

함수 생성 logfunc1 (텍스트) 타임 스탬프를 반환합니다.
    선언하다
        $ 1에 대한 logtxt 별칭;
    시작하다
        Logtable 값에 삽입 (logtxt, 'now' ');
        ``지금 '' '을 반환합니다.
    끝;
'언어 plpgsql;

and

함수 생성 logfunc2 (텍스트) 타임 스탬프를 반환합니다.
    선언하다
        $ 1에 대한 logtxt 별칭;
        곡선 타임 스탬프;
    시작하다
        큐 타임 : = ''now '';
        Logtable 값 (logtxt, curtime)에 삽입;
        큐 타임 리턴;
    끝;
'언어 plpgsql;

의 경우logfunc1, ThePostgreSQLMain Parser는 알고 있습니다 계획을 준비 할 때삽입, 그 줄'now'로 해석타임 스탬프대상 때문입니다 열logtable유형. 따라서 지금은 그것으로부터 일정하게 만들 것입니다. 그런 다음 상수 값은의 모든 호출에 사용됩니다.logfunc1세션 수명 동안. 말할 것도없이 이것은 프로그래머가 원했던 것이 아니라고 말할 필요가 없습니다.

의 경우logfunc2, ThePostgreSQL메인 파서는 그렇지 않습니다 어떤 유형을 알고'now'따라서 유형의 데이터 값을 반환합니다텍스트문자열 포함now. 다음으로 현지인에게 임무를 수행하는 동안 변하기 쉬운CURTIME, Thepl/pgsql통역사는이 문자열을 캐스트합니다 그만큼타임 스탬프전화하여 타이핑Text_outTimestamp_in변환 기능. 그래서, 계산 된 타임 스탬프는 각 실행에 따라 업데이트됩니다. 프로그래머가 기대합니다.

레코드 변수의 변이 가능한 특성은 문제를 제시합니다. 이 연결. 레코드 변수의 필드가 사용되는 경우 토토 결과 또는 진술, 필드의 데이터 유형은 하나의 호출과 동일한 토토 결과 사이의 변화는 토토 결과식은 존재하는 데이터 유형을 사용하여 계획됩니다. 토토 결과이 처음 도달했을 때. 이걸 명심하십시오 하나 이상의 이벤트를 처리하는 트리거 절차 작성 테이블. (execute사용하는 데 사용할 수 있습니다 필요할 때이 문제를 중심으로.)