다음에 작성된 기능PL/pgSQL실행하여 서버에 정의됩니다.함수 생성명령. 이러한 명령은 일반적으로 다음과 같습니다.
CREATE FUNCTION somefunc(정수, 텍스트) RETURNS 정수
그대로 '함수 본문 텍스트'
언어 plpgsql;
함수 본문은 지금까지 단순한 문자열 리터럴입니다.함수 생성걱정됩니다. 달러 인용을 사용하는 것이 도움이 되는 경우가 많습니다(참조섹션 4.1.2.4) 일반적인 작은따옴표 구문 대신 함수 본문을 작성합니다. 달러 인용이 없으면 함수 본문의 작은따옴표나 백슬래시를 두 배로 늘려 이스케이프해야 합니다. 이 장의 거의 모든 예제에서는 함수 본문에 달러로 묶인 리터럴을 사용합니다.
PL/pgSQL은 블록 구조의 언어입니다. 함수 본문의 전체 텍스트는 다음과 같아야 합니다.차단. 블록은 다음과 같이 정의됩니다.
[ <<라벨] [선언선언] 시작문장END [라벨];
블록 내의 각 선언과 각 명령문은 세미콜론으로 종료됩니다. 다른 블록 내에 나타나는 블록은 뒤에 세미콜론이 있어야 합니다.END, 위에 표시된 대로; 그러나 최종END함수 본문을 결론짓는 데에는 세미콜론이 필요하지 않습니다.
일반적인 실수는 바로 뒤에 세미콜론을 쓰는 것입니다.시작. 이는 올바르지 않으며 구문 오류가 발생합니다.
A 라벨에서 사용할 블록을 식별하려는 경우에만 필요합니다.종료문을 사용하거나 블록에 선언된 변수의 이름을 한정합니다. 라벨이 뒤에 제공되는 경우END, 블록 시작 부분의 라벨과 일치해야 합니다.
모든 키워드는 대소문자를 구분하지 않습니다. 식별자는 일반 SQL 명령에서와 마찬가지로 큰따옴표로 묶이지 않는 한 암시적으로 소문자로 변환됩니다.
댓글은 다음과 같은 방식으로 작동합니다.PL/pgSQL일반 SQL과 같은 코드입니다. 이중 대시(--)는 줄 끝까지 확장되는 주석을 시작합니다. 갑/*일치하는 항목으로 확장되는 블록 주석을 시작합니다.*/. 차단 댓글이 중첩됩니다.
블록의 명령문 섹션에 있는 모든 명령문은 다음과 같을 수 있습니다.하위 블록. 하위 블록은 논리적 그룹화에 사용되거나 변수를 작은 명령문 그룹으로 지역화하는 데 사용될 수 있습니다. 서브블록에 선언된 변수는 서브블록 기간 동안 외부 블록의 비슷한 이름의 변수를 마스크합니다. 하지만 블록의 레이블로 이름을 한정하면 외부 변수에 접근할 수 있습니다. 예를 들면:
CREATE FUNCTION somefunc() 정수를 $$로 반환합니다.
<< 외부블록
선언
수량 정수 := 30;
시작
RAISE NOTICE '여기의 수량은 %입니다.', 수량; -- 30개를 인쇄합니다.
수량 := 50;
--
-- 하위 블록 생성
--
선언
수량 정수 := 80;
시작
RAISE NOTICE '여기의 수량은 %입니다.', 수량; -- 80을 인쇄합니다.
RAISE NOTICE '여기의 외부 수량은 %입니다.', Outerblock.Quantity; -- 50개를 인쇄합니다.
끝;
RAISE NOTICE '여기의 수량은 %입니다.', 수량; -- 50개를 인쇄합니다.
반품 수량;
끝;
$$ 언어 plpgsql;
실제로 숨겨진 것이 있습니다“외부 블록”모든 사람의 몸을 둘러싸고PL/pgSQL함수. 이 블록은 함수의 매개변수(있는 경우)에 대한 선언과 다음과 같은 특수 변수를 제공합니다.발견(참조섹션 42.5.5). 외부 블록에는 함수 이름으로 레이블이 지정되어 있습니다. 이는 매개변수와 특수 변수가 함수 이름으로 한정될 수 있음을 의미합니다.
사용법을 혼동하지 않는 것이 중요합니다.시작/END문 그룹화용PL/pgSQL트랜잭션 제어를 위해 유사한 이름의 SQL 명령을 사용합니다.PL/pgSQL의시작/END그룹화에만 사용됩니다. 트랜잭션을 시작하거나 종료하지 않습니다. 참조배트맨 토토 PostgreSQL : 문서 : 13 : 42.8. 거래 관리거래 관리에 대한 정보PL/pgSQL. 또한,를 포함하는 블록예외절은 외부 트랜잭션에 영향을 주지 않고 롤백할 수 있는 하위 트랜잭션을 효과적으로 형성합니다. 이에 대한 자세한 내용은 다음을 참조하세요.섹션 42.6.8.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.