토토 사이트 순위 구조는 아마도 가장 유용 할 것입니다 (및pl/pgsql.pl/pgsql의 토토 사이트 순위토토 사이트 순위매우 유연한 데이터
반환 할 수있는 두 가지 명령이 있습니다.return및다음 반환.
return표현;
return표현식표현발신자에게. 이 양식은입니다pl/pgsql세트를 반환하지 않는 함수.
스칼라 유형을 반환 할 때 모든 표현식을 사용할 수 있습니다.표현.
출력 매개 변수로 함수를 선언 한 경우 쓰기return표현이없는. 그만큼
기능을 반환하도록 선언 한 경우void, areturn진술return.
함수의 반환 값은 정의되지 않은 상태로 남겨질 수 없습니다.return문, 런타임 오류가 발생합니다. 이 제한이 있습니다void. 그 경우return명령문이 자동으로됩니다
다음 반환표현;
언제pl/pgsql함수setof약간, 따라야 할 절차다음 반환명령, 그리고 최종return인수가없는 명령은반환스칼라 및 복합 데이터와 함께 사용할 수 있습니다"테이블"결과가 반환됩니다.
다음 반환실제로는 그렇지 않습니다pl/pgsql함수. 연속다음 반환명령이 실행되고 결과 세트가 쌓입니다. 최종return
출력 매개 변수로 함수를 선언 한 경우 쓰기다음 반환표현이없는.기록 설정여러 출력 매개 변수가있을 때 또는setof약간유형의 출력 매개 변수가 하나만있을 때약간, a
사용하는 기능다음 반환다음 방식으로 호출해야합니다.
select * from some_func ();
즉, 함수는 a의 테이블 소스로 사용해야합니다.From절.
참고 :현재의 구현다음 반환forpl/pgsql전체 결과를 저장합니다pl/pgsql함수는 매우 생성됩니다pl/pgsql사용자가 정의 할 수 있습니다work_mem구성 변수. 가지고있는 관리자
if진술을 실행할 수 있습니다pl/pgsql5 가지 형태의if:
if ... then
if ... 그런 다음 ... else
if ... 그런 다음 ... else if
if ... 그런 다음 ... Elsif ... 그런 다음 ...
if ... 그런 다음 ... elseif ... 그런데 ...
if부울-표현the진술END IF;
if-then진술은 다음과 같습니다if. 진술the및종료 if조건이 있으면 실행됩니다
예 :
if v_user_id <> 0입니다
if부울-표현the진술else진술END IF;
if-then-else진술이 추가if-then
예 :
Parentid가 null 또는 parentid = ''인 경우 = ''
v_count> 0이면
if진술은 중첩 될 수 있습니다
demo_row.sex = 'm'이면
이 양식을 사용하면 실제로 중첩if내부의 진술else외부의 일부if진술. 따라서 하나가 필요합니다종료 if각 중첩에 대한 명령문if그리고 부모를위한 하나if-else. 이것은 실행 가능하지만 지루한 성장합니다
if부울-표현the진술 [elsif부울-표현the진술 [elsif부울-표현the진술 ...]]else진술 ]
if-then-elsif-else제공 aif-then-else-if-then명령이지만 하나만종료 if필요합니다.
여기 예입니다.
if number = 0이면
elseifelsif.
withloop, 출구, 계속, while및for진술, 당신은 당신의 것을 준비 할 수 있습니다pl/pgsql반복 할 기능 a
[ <<레이블 ]진술엔드 루프 [ 레이블 ];
loop무조건 정의출구또는return진술. 선택 사항레이블출구및계속어떤 루프를 지정하기위한 중첩 루프의 명령문
출구 [ 레이블 ] [언제표현 ];
NO레이블가 제공됩니다엔드 루프다음에 실행됩니다. 만약에레이블가 주어져 있어야합니다END.
if언제루프가 지정되어 있습니다표현사실입니다. 그렇지 않으면 토토 사이트 순위하십시오출구.
출구모든 유형과 함께 사용할 수 있습니다시작블록,출구다음을 통제합니다
예 :
루프
계속 [ 레이블 ] [언제표현 ];
NO레이블가 제공됩니다레이블가 있으며, 그것을 지정합니다
if언제다음은 지정되어 있습니다표현사실입니다. 그렇지 않으면 토토 사이트 순위하십시오계속.
계속모두와 함께 사용할 수 있습니다
예 :
루프
[ <<레이블 ]표현loop진술엔드 루프 [ 레이블 ];
thewhile진술 반복 a
예 :
while Voll_owed> 0 및 Gift_certificate_balance> 0 루프
[ <<레이블 ]이름in [Reverse] 표현 .. 표현loop진술엔드 루프 [ 레이블 ];
이 형태의for루프를 만듭니다이름자동으로 정의됩니다정수내부에만 존재합니다Reverse지정되어 있습니다.
정수의 일부 예for루프 :
I의 경우 1..10 루프
하한이 상한보다 큰 경우 (또는Reversecase), the
다른 유형의 사용for루프,
[ <<레이블 ]Record_or_rowin쿼리loop진술엔드 루프 [ 레이블 ];
레코드 또는 행 변수는 각 행에 연속적으로 할당됩니다.쿼리(select명령) 및 루프
함수 생성 cs_refresh_mviews () 정수를 $$로 반환합니다
루프가 an에 의해 종료 된 경우출구문서, 마지막으로 할당 된 행 값은입니다
thefor-in-execute성명서입니다
[ <<레이블 ]Record_or_row실행text_expressionloop진술엔드 루프 [ 레이블 ];
이것은 소스를 제외하고는 이전 형식과 같습니다select명령문은 a로 지정됩니다for루프. 이것은 허용합니다execute진술.
참고 :thepl/pgsql현재 파서for루프 (정수 또는 쿼리 결과)를 확인하여..괄호 안에 나타납니다in및loop. 만약에..는 그렇지 않습니다..따라서 가능성이 높습니다"루프 변수는 행을 통한 루프 변수입니다.25460_25530
기본적으로 A에서 발생하는 오류가 발생합니다.pl/pgsql함수의 실행 중단시작예외절. 구문은 연장입니다시작블록 :
[ <<레이블 ]선언선언 ]진술예외조건 [또는조건 ... ] 그런 다음handler_statements [언제조건 [또는조건 ... ] 그런 다음handler_statements ... ]
오류가 발생하지 않으면이 형태의 블록은 단순히 모든 것을 실행합니다.진술END. 그러나 내에서 오류가 발생하면진술, 추가 처리진술버려졌습니다.예외목록. 목록은 첫 번째를 검색합니다조건오류와 일치합니다handler_statements실행됩니다END. 일치하지 않으면 오류가 전파됩니다예외절예외
the조건이름이 될 수 있습니다부록. 카테고리 이름은 해당 범주 내에서 오류와 일치합니다.기타을 제외한 모든 오류 유형과 일치합니다.query_canceled. (가능하지만 종종query_canceledby
선택한 내에서 새 오류가 발생하면handler_statements, 잡을 수 없습니다예외조항예외조항을 잡을 수 있습니다.
오류가 AN에 의해 잡히면예외절의 조항,.pl/pgsql함수는 그대로 유지됩니다
mytab에 삽입 (FirstName, lastName) 값 ( 'Tom', 'Jones');
토토 사이트 순위가 할당에 도달하는 경우y, A로 실패합니다.division_by_zero오류. 이것은 잡힐 것입니다예외절. 가치return성명서x업데이트명령삽입블록 앞의 명령은 롤백되지 않으므로Tom Jones아님Joe.
팁 :an을 포함하는 블록예외절은 훨씬 더 많습니다예외필요없이.
예외 핸들러 내에서sqlstate변수에는 오류 코드가 포함되어 있습니다표 A-1asqlerrm변수에는 오류 메시지가 포함됩니다