2025 년 7 월 17 일 : | 토토 캔 18 베타 2 릴리스!
이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은의 동일한 페이지를 보려고 할 수 있습니다토토 사이트 추천 : 문서 : 17 : 41.4. 표현버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

36.5. 표현

모든 표현식에 사용 된pl/pgsql진술은 다음을 사용하여 처리됩니다 서버의 일반SQL집행자. 사실상 쿼리

select표현

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

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

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

and

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

의 경우logfunc1, ThePostgreSQLMain Parser는 알고 있습니다 계획을 준비 할 때삽입String'now'로 해석타임 스탬프대상이기 때문에 열logtable유형. 따라서,'now'a로 변환됩니다 일정 할 때삽입계획되어 있습니다 그런 다음의 모든 호출에 사용됩니다.logfunc1세션 수명 동안. 말할 것도없이, 이것은 프로그래머가 원했던 것이 아닙니다.

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

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