PL/pgSQL은 블록 구조 언어. 함수의 전체 텍스트 정의는 다음과 같아야 합니다.차단. 블록은 다음과 같이 정의됩니다:
[ <<라벨 ] [선언선언 ] 시작하다문장END [ 라벨 ];
블록 내의 각 선언과 각 명령문은 세미콜론으로 끝납니다. 다른 블록 안에 나타나는 블록 블록 뒤에는 세미콜론이 있어야 합니다.END, 위에 표시된 것처럼; 그러나 최종END함수 본문을 마무리하는 데는 세미콜론이 필요하지 않습니다.
모든 키워드와 식별자는 대문자를 혼합하여 쓸 수 있습니다. 그리고 소문자. 식별자는 암시적으로 소문자로 변환됩니다. 큰따옴표를 사용하지 않는 한.
댓글에는 두 가지 유형이 있습니다.PL/pgSQL. 이중 대시(--)은 다음의 끝까지 확장되는 댓글을 시작합니다. 라인. 에이/*차단 댓글을 시작합니다 다음 발생으로 확장됩니다.*/. 블록 주석은 중첩될 수 없지만 이중 주석입니다. 대시 주석은 블록 주석과 이중 주석으로 묶을 수 있습니다. 대시는 블록 주석 구분 기호를 숨길 수 있습니다./*그리고*/.
블록의 명령문 섹션에 있는 모든 명령문은 다음과 같을 수 있습니다.하위 블록. 하위 블록은 다음 용도로 사용할 수 있습니다. 논리적 그룹화 또는 변수를 작은 그룹으로 지역화하기 위해 진술.
다음 선언 섹션에 선언된 변수 블록은 매번 기본값으로 초기화됩니다. 블록은 함수 호출당 한 번만 입력되는 것이 아닙니다. 을 위한 예:
CREATE FUNCTION somefunc() 정수를 $$로 반환합니다.
선언하다
수량 정수 := 30;
시작하다
RAISE NOTICE '여기의 수량은 %입니다.', 수량; -- 여기의 수량은 30입니다.
수량 := 50;
--
-- 하위 블록 생성
--
선언하다
수량 정수 := 80;
시작하다
RAISE NOTICE '여기의 수량은 %입니다.', 수량; -- 여기의 수량은 80입니다.
끝;
RAISE NOTICE '여기의 수량은 %입니다.', 수량; -- 여기의 수량은 50입니다.
반품 수량;
끝;
$$ 언어 plpgsql;
사용법을 혼동하지 않는 것이 중요합니다.시작/END그룹화용 의 진술PL/pgSQL와 함께 트랜잭션 제어를 위한 데이터베이스 명령입니다.PL/pgSQL's시작/END전용입니다 그룹화; 트랜잭션을 시작하거나 종료하지 않습니다. 기능 및 트리거 프로시저는 항상 트랜잭션 내에서 실행됩니다. 외부 쿼리에 의해 설정됨 - 해당 쿼리를 시작하거나 커밋할 수 없습니다. 트랜잭션을 실행할 컨텍스트가 없기 때문에 트랜잭션 in. 그러나를 포함하는 블록예외절은 효과적으로 영향을 주지 않고 롤백할 수 있는 하위 트랜잭션 외부 거래. 이에 대한 자세한 내용은 다음을 참조하세요.섹션 36.7.5.