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

23.6. 배트맨 토토 구조

배트맨 토토 구조는 아마도 가장 유용 할 것입니다 (및 중요)의 일부pl/pgsql. 와 함께pl/pgsql의 배트맨 토토 구조, 당신은 조작 할 수 있습니다PostgreSQL매우 유연한 데이터 강력한 방법.

23.6.1. a에서 돌아온다 기능

return표현;

함수가 종료되고 값표현상단으로 반환됩니다 집행자. 표현식의 결과는 자동으로 캐스팅됩니다 설명 된대로 함수의 리턴 유형으로 과제.

함수의 반환 값은 정의되지 않은 상태로 남을 수 없습니다. 만약에 배트맨 토토는 함수의 최상위 블록의 끝에 도달합니다. Return 문에 도달하지 않으면 런타임 오류가 발생합니다 발생하다.

23.6.2. 조건부

if진술을 실행할 수 있습니다 특정 조건에 따라 명령.pl/pgsqlif-then, if-then, 4 가지 형태가 있습니다. if-then-else, if-then-else if, if-then-elsif-then-else.

23.6.2.1. if-then

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

if-then 진술은 IF의 가장 간단한 형태입니다. 그만큼 그때와 종료 사이의 진술은 조건은 사실입니다. 그렇지 않으면 건너 뜁니다.

if v_user_id < 0이면
    사용자 업데이트는 이메일 = v_email user_id = v_user_id를 설정합니다.
끝 If;

23.6.2.2. if-then-else

if부울-표현the진술else진술종료 if;

if-then-else 문은 당신을 허용하여 if-then에 추가합니다 대체 진술 세트를 지정하십시오 조건이 거짓으로 평가되면 실행됩니다.

Parentid가 null 또는 parentid = '' ''인 경우
그 다음에 
    풀 이름을 반환하십시오.
또 다른
    hp_true_filename (parentid) ||를 반환합니다 ''/''|| 풀 이름;
끝 IF;

v_count 0이면 
    user_count (count) 값 (v_count)에 삽입;
    `` 't' '를 반환합니다.
또 다른 
    `` 'f' ';
끝 If;

23.6.2.3. if-then-else if

다음과 같이 진술을 중첩 할 수있는 경우 예:

if demo_row.sex = ''m ''라는 경우
  pretty_sex : = ''man '';
또 다른
  demo_row.sex = ''f ''라는 경우
    pretty_sex : = ''여자 '';
  끝 IF;
끝 If;

이 양식을 사용하면 실제로 IF 중첩을 사용합니다. 외부 IF 문의 다른 부분 내부의 진술. 따라서 각 중첩 된 if에 대해 한쪽 끝이 필요합니다. 부모의 경우 부모. 이것은 실행 가능하지만 언제 지루합니다 확인해야 할 대안이 많이 있습니다.

23.6.2.4. if-then-elsif-else

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

if-then-elsif-else는보다 편리한 방법을 제공합니다 한 문장에서 많은 대안을 확인합니다. 공식적으로 그것은입니다 중첩 된 if-then-else-if-then 명령에 해당하지만 필요한 경우 한쪽 끝.

여기 예입니다.

if number = 0이면
    결과 : = ''Zero '';
Elsif 번호 0 
    결과 : = ''긍정적 인 '';
Elsif 번호 <0
    결과 : = ''부정적인 '';
또 다른
    - 흠, 유일한 다른 가능성은 숫자가 null이라는 것입니다.
    결과 : = ''null '';
끝 If;

최종 다른 섹션은 선택 사항입니다.

23.6.3. 단순한 배트맨 토토

배트맨 토토를 사용하여 종아리를 마시면 당신의 준비pl/pgsql일련의 명령을 반복하는 기능.

23.6.3.1. 고리

[<< 레이블 ]
고리진술엔드 배트맨 토토;

배트맨 토토는 반복되는 무조건 배트맨 토토를 정의합니다 출구 또는 반환 명세서에 의해 종료 될 때까지 무기한. 옵션 레이블은 중첩의 종료 명세서에서 사용할 수 있습니다. 어떤 레벨의 중첩이어야하는지 지정하는 배트맨 토토 종료.

23.6.3.2. 출구

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

NO레이블가 제공됩니다 가장 안쪽 배트맨 토토가 종료되고 끝난 후에는 진술이 종료됩니다 배트맨 토토는 다음에 실행됩니다. 만약에레이블주어지면 레이블이어야합니다 중첩 배트맨 토토 또는 블록의 전류 또는 일부 외부 레벨. 그 다음에 명명 된 배트맨 토토 또는 블록이 종료되고 제어가 계속됩니다. 배트맨 토토/블록의 해당 후 명세서와 함께 끝.

현재 존재하는 경우 배트맨 토토 출구가 지정된 경우에만 발생합니다. 조건은 사실입니다. 그렇지 않으면 제어가 진술로 전달됩니다 출구 후.

예 :

배트맨 토토
    - 일부 계산
    count 0이면
        출구;  - 종료 배트맨 토토
    끝 IF;
엔드 배트맨 토토;

고리
    - 일부 계산
    count 0 일 때 종료;
엔드 배트맨 토토;

시작하다
    - 일부 계산
    주식이 100000이면
        출구;  -- 불법적인. 배트맨 토토 외부에서 종료를 사용할 수 없습니다
    끝 IF;
끝;

23.6.3.3. 하는 동안

[<< 레이블 ]
하는 동안표현loop진술엔드 배트맨 토토;

while 진술은 일련의 진술을 반복합니다 조건 표현이 True로 평가되는 한. 그만큼 배트맨 토토에 입력하기 직전에 조건이 확인됩니다. 몸.

예 :

while Voll_owed 0 및 Gift_certificate_balance 0 배트맨 토토
    - 여기에 일부 계산
엔드 배트맨 토토;

Boolean_expression 배트맨 토토는 아닙니다
    - 여기에 일부 계산
엔드 배트맨 토토;

23.6.3.4. for (Integer for-loop)

[<< 레이블 ]
을 위한이름in [Reverse]표현 .. 표현loop진술엔드 배트맨 토토;

이 형태의 For는 범위에 반복되는 배트맨 토토를 만듭니다. 정수 값의. 변수이름는 자동으로 유형으로 정의됩니다 정수와 배트맨 토토 내부에만 존재합니다. 두 표현 범위의 하단 및 상한을 제공하는 것이 평가됩니다. 배트맨 토토에 들어가면 한 번. 반복 단계는 일반적으로입니다 1, 반전이 지정 될 때 -1입니다.

배트맨 토토에 대한 정수의 일부 예 :

I의 경우 1..10 배트맨 토토
  - 여기에 일부 표현

    통지``나는 %'', i;
엔드 배트맨 토토;

반전 10..1 배트맨 토토
    - 여기에 일부 표현
엔드 배트맨 토토;

23.6.4. 쿼리를 통한 반복 결과

다른 유형의 배트맨 토토 사용을 통해 반복 할 수 있습니다. 쿼리의 결과와 그에 따라 해당 데이터를 조작합니다. 구문은 다음과 같습니다.

[<< 레이블 ]
을 위한레코드 | 열inselect_queryloop진술엔드 배트맨 토토;

레코드 또는 행 변수는 모든 선택 쿼리와 배트맨 토토 바디로 인한 행은 각 행에 대해 실행되었습니다. 예는 다음과 같습니다.

함수 생성 cs_refresh_mviews () 정수를 반환합니다.
선언하다
     mviews 레코드;
시작하다
     cs_log ( ''상쾌한 구체화 된 뷰 ... '')를 수행합니다.

     SELECT *의 MVIEWS의 경우 CS_MATERIALIZED_VIEWS ORDER의 SORT_KEY LOOP 주문

         - 이제 "mviews"는 cs_materialized_views의 한 레코드를 가지고 있습니다

         CS_LOG ( ''RESHREATHING INSEARTIED VIEW ''|| QUOTE_INDEN (MVIEWS.MV_NAME) || ''... '')을 수행합니다.
         ``Truncate Table ''||를 실행하십시오 quote_ident (mviews.mv_name);
         ''삽입 ''||를 실행하십시오 quote_ident (mviews.mv_name) || '' '' '|| mviews.mv_query;
     엔드 배트맨 토토;

     CS_LOG ( ''DONE RESHREATHING INSEVERIFED VIOGS. '');
     반환 1;
끝;
'언어'plpgsql ';

배트맨 토토가 종료 문에 의해 종료되면 마지막 지정된 행 값은 배트맨 토토 후에도 여전히 액세스 할 수 있습니다.

execute for-execute 진술은 반복하는 또 다른 방법입니다 기록 :

[<< 레이블 ]
을 위한레코드 | 열executetext_expression배트맨 토토진술엔드 배트맨 토토;

이것은 소스를 제외하고는 이전 형식과 같습니다. select 문은 문자열 표현식으로 지정됩니다. for 배트맨 토토에 대한 각 항목에 대해 평가 및 재구성. 이것 프로그래머가 사전 계획된 속도를 선택할 수 있습니다. 쿼리 또는 동적 쿼리의 유연성과 마찬가지로 평범한 실행 진술.

참고 :thepl/pgsql현재 파서 두 종류의 배트맨 토토 (정수 또는 대상 변수 여부를 확인하여 레코드 반복) 직후에 언급 된 기록/행으로 선언되었습니다. 변하기 쉬운. 그렇지 않다면, 그것은 배트맨 토토의 정수로 추정됩니다. 이로 인해 직관적이지 않은 오류 메시지가 발생할 수 있습니다 진정한 문제는 변수 이름.