| PostgreSQL 9.3.25 문서 | ||||
|---|---|---|---|---|
| 이전 | Postgre메이저 토토 사이트 : 문서 : 9.3 : PL/PG메이저 토토 사이트 -메이저 토토 사이트 절차 언어 | 40장.PL/pgSQL - SQL절차적 언어 | 다음 | |
다음에 작성된 기능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함수. 이 블록 다음과 같이 함수의 매개변수(있는 경우) 선언을 제공합니다. 그리고 다음과 같은 특수 변수도 있습니다.발견(참조섹션 40.5.5). 외부 블록에는 함수 이름이 표시되어 있습니다. 이는 매개변수와 특수 변수를 다음과 같이 정규화할 수 있음을 의미합니다. 함수의 이름입니다.
사용법을 혼동하지 않는 것이 중요합니다.시작/END그룹화용 의 진술PL/pgSQL와 함께 트랜잭션 제어를 위한 비슷한 이름의 SQL 명령입니다.PL/pgSQL's시작/END전용입니다. 그룹화; 트랜잭션을 시작하거나 종료하지 않습니다. 기능 및 트리거 프로시저는 항상 트랜잭션 내에서 실행됩니다. 외부 쿼리에 의해 설정됨 - 해당 쿼리를 시작하거나 커밋할 수 없습니다. 트랜잭션을 실행할 컨텍스트가 없기 때문에 트랜잭션 in. 그러나를 포함하는 블록예외절이 효과적으로 하위 트랜잭션을 형성합니다. 외부 트랜잭션에 영향을 주지 않고 롤백할 수 있습니다. 이에 대한 자세한 내용은 다음을 참조하세요.섹션 40.6.6.