pl/pgsqlis 블록 구조적 언어. 함수의 전체 텍스트 정의는이어야합니다.블록. 블록은 정의 :
[ <<레이블 ] [선언선언 ] 시작하다진술끝;
블록 내의 각 선언 및 각 진술은 다음과 같습니다 세미콜론에 의해 종료되었습니다.
모든 키워드와 식별자는 혼합 상단으로 작성할 수 있습니다. 그리고 소문자. 식별자는 암시 적으로 변환됩니다 두 번 인용되지 않는 한 소문자.
두 가지 유형의 주석이 있습니다pl/pgsql. 더블 대시 (--) 끝까지 연장되는 댓글을 시작합니다. 라인. 에이/*블록 주석을 시작합니다 다음 번 발생하는까지 확장됩니다.*/. 블록 댓글은 중첩 될 수는 없지만 두 배입니다 대시 댓글은 블록 댓글과 더블로 둘러싸여 있습니다. 대시는 블록 주석을 숨길 수 있습니다/*and*/.
블록의 진술서 섹션의 모든 진술은 A가 될 수 있습니다.서브 블록. 서브 블록을 사용할 수 있습니다 논리적 그룹화 또는 소수 그룹에 변수를 현지화하기 위해 진술.
선언 섹션에서 선언 된 변수 a 블록은 매번 기본값으로 초기화됩니다. 함수 호출 당 한 번뿐만 아니라 블록이 입력됩니다. 을 위한 예:
CREATE FUNCTION somefunc() RETURNS integer AS ' DECLARE quantity integer := 30; BEGIN RAISE NOTICE ''Quantity here is %'', quantity; -- Quantity here is 30 quantity := 50; -- -- Create a subblock -- DECLARE quantity integer := 80; BEGIN RAISE NOTICE ''Quantity here is %'', quantity; -- Quantity here is 80 END; RAISE NOTICE ''Quantity here is %'', quantity; -- Quantity here is 50 RETURN quantity; END; ' LANGUAGE plpgsql;
사용을 혼동하지 않는 것이 중요합니다시작/END그룹화 진술PL/PGSQL트랜잭션 제어를위한 데이터베이스 명령.pl/pgsql's시작/END그룹화; 그들은 거래를 시작하거나 종료하지 않습니다. 기능 및 트리거 절차는 항상 거래 내에서 실행됩니다 외부 쿼리에 의해 설정 --- 시작하거나 커밋 할 수 없습니다. 거래, 이후PostgreSQL중첩 된 거래가 없습니다.