이 문서는 지원되지 않는 버전의 토토 사이트 순위을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다토토 사이트 PostgreSQL : 문서 : 17 : 41.6. 제어 구조버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

36.7. 토토 사이트 순위 구조

토토 사이트 순위 구조는 아마도 가장 유용 할 것입니다 (및pl/pgsql.pl/pgsql의 토토 사이트 순위토토 사이트 순위매우 유연한 데이터

36.7.1. a에서 돌아온다

반환 할 수있는 두 가지 명령이 있습니다.return다음 반환.

36.7.1.1. return

return표현;

return표현식표현발신자에게. 이 양식은입니다pl/pgsql세트를 반환하지 않는 함수.

스칼라 유형을 반환 할 때 모든 표현식을 사용할 수 있습니다.표현.

출력 매개 변수로 함수를 선언 한 경우 쓰기return표현이없는. 그만큼

기능을 반환하도록 선언 한 경우void, areturn진술return.

함수의 반환 값은 정의되지 않은 상태로 남겨질 수 없습니다.return문, 런타임 오류가 발생합니다. 이 제한이 있습니다void. 그 경우return명령문이 자동으로됩니다

36.7.1.2. 다음 반환

다음 반환표현;

언제pl/pgsql함수setof약간, 따라야 할 절차다음 반환명령, 그리고 최종return인수가없는 명령은반환스칼라 및 복합 데이터와 함께 사용할 수 있습니다"테이블"결과가 반환됩니다.

다음 반환실제로는 그렇지 않습니다pl/pgsql함수. 연속다음 반환명령이 실행되고 결과 세트가 쌓입니다. 최종return

출력 매개 변수로 함수를 선언 한 경우 쓰기다음 반환표현이없는.기록 설정여러 출력 매개 변수가있을 때 또는setof약간유형의 출력 매개 변수가 하나만있을 때약간, a

사용하는 기능다음 반환다음 방식으로 호출해야합니다.

select * from some_func ();

즉, 함수는 a의 테이블 소스로 사용해야합니다.From절.

참고 :현재의 구현다음 반환forpl/pgsql전체 결과를 저장합니다pl/pgsql함수는 매우 생성됩니다pl/pgsql사용자가 정의 할 수 있습니다work_mem구성 변수. 가지고있는 관리자

36.7.2. 조건부

if진술을 실행할 수 있습니다pl/pgsql5 가지 형태의if:

  • if ... then

  • if ... 그런 다음 ... else

  • if ... 그런 다음 ... else if

  • if ... 그런 다음 ... Elsif ... 그런 다음 ...

  • if ... 그런 다음 ... elseif ... 그런데 ...

36.7.2.1. if-then

if부울-표현the진술END IF;

if-then진술은 다음과 같습니다if. 진술the종료 if조건이 있으면 실행됩니다

예 :

​​if v_user_id <> 0입니다

36.7.2.2. if-then-else

if부울-표현the진술else진술END IF;

if-then-else진술이 추가if-then

예 :

Parentid가 null 또는 parentid = ''인 경우 = ''
v_count> 0이면

36.7.2.3. if-then-else if

if진술은 중첩 될 수 있습니다

demo_row.sex = 'm'이면

이 양식을 사용하면 실제로 중첩if내부의 진술else외부의 일부if진술. 따라서 하나가 필요합니다종료 if각 중첩에 대한 명령문if그리고 부모를위한 하나if-else. 이것은 실행 가능하지만 지루한 성장합니다

36.7.2.4. if-then-elsif-else

if부울-표현the진술
[elsif부울-표현the진술
[elsif부울-표현the진술
    ...]]else진술 ]

if-then-elsif-else제공 aif-then-else-if-then명령이지만 하나만종료 if필요합니다.

여기 예입니다.

if number = 0이면

36.7.3. 단순한

withloop, 출구, 계속, whilefor진술, 당신은 당신의 것을 준비 할 수 있습니다pl/pgsql반복 할 기능 a

36.7.3.1. loop

[ <<레이블 ]진술엔드 루프 [ 레이블 ];

loop무조건 정의출구또는return진술. 선택 사항레이블출구계속어떤 루프를 지정하기위한 중첩 루프의 명령문

36.7.3.2. 출구

출구 [ 레이블 ] [언제표현 ];

NO레이블가 제공됩니다엔드 루프다음에 실행됩니다. 만약에레이블가 주어져 있어야합니다END.

if언제루프가 지정되어 있습니다표현사실입니다. 그렇지 않으면 토토 사이트 순위하십시오출구.

출구모든 유형과 함께 사용할 수 있습니다시작블록,출구다음을 통제합니다

예 :

루프

36.7.3.3. 계속

계속 [ 레이블 ] [언제표현 ];

NO레이블가 제공됩니다레이블가 있으며, 그것을 지정합니다

if언제다음은 지정되어 있습니다표현사실입니다. 그렇지 않으면 토토 사이트 순위하십시오계속.

계속모두와 함께 사용할 수 있습니다

예 :

루프

36.7.3.4. while

[ <<레이블 ]표현loop진술엔드 루프 [ 레이블 ];

thewhile진술 반복 a

예 :

while Voll_owed> 0 및 Gift_certificate_balance> 0 루프

36.7.3.5. for(정수 변형)

[ <<레이블 ]이름in [Reverse] 표현 .. 표현loop진술엔드 루프 [ 레이블 ];

이 형태의for루프를 만듭니다이름자동으로 정의됩니다정수내부에만 존재합니다Reverse지정되어 있습니다.

정수의 일부 예for루프 :

I의 경우 1..10 루프

하한이 상한보다 큰 경우 (또는Reversecase), the

36.7.4. 쿼리를 통한 반복

다른 유형의 사용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루프 (정수 또는 쿼리 결과)를 확인하여..괄호 안에 나타납니다inloop. 만약에..는 그렇지 않습니다..따라서 가능성이 높습니다"루프 변수는 행을 통한 루프 변수입니다.25460_25530

36.7.5. 트래핑

기본적으로 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변수에는 오류 메시지가 포함됩니다

예 36-1. 예외업데이트/삽입

이 예제는 예외 처리를 사용하여 하나를 수행합니다업데이트또는삽입, 적절한.

테이블 DB 작성 (int 기본 키, b 텍스트);