배트맨 토토 구조는 아마도 가장 유용할 것입니다(그리고 중요) 일부PL/pgSQL. 와 함께PL/pgSQL의 통제 배트맨 토토를 조작할 수 있습니다.PostgreSQL매우 유연하고 강력한 방법입니다.
반환표현;
함수가 종료되고 값표현상위로 반환됩니다 집행자. 표현식의 결과가 자동으로 캐스팅됩니다. 설명된 대로 함수의 반환 유형에 과제.
함수의 반환 값은 정의되지 않은 상태로 둘 수 없습니다. 만약에 제어가 함수의 최상위 블록 끝에 도달함 RETURN 문을 누르지 않으면 런타임 오류가 발생합니다. 발생합니다.
IF문을 통해 실행할 수 있습니다.
    특정 조건에 따른 명령입니다.PL/pgSQLIF에는 IF-THEN,
    IF-THEN-ELSE, IF-THEN-ELSE IF 및 IF-THEN-ELSIF-THEN-ELSE.
IF부울 표현식그때문장END IF;
IF-THEN 문은 IF의 가장 간단한 형태입니다. 는 THEN과 END IF 사이의 명령문은 다음과 같은 경우에 실행됩니다. 조건이 참입니다. 그렇지 않으면 건너뜁니다.
IF v_user_id < 0 THEN
    사용자 업데이트 SET email = v_email WHERE user_id = v_user_id;
종료하면;
    IF부울 표현식그때문장ELSE문장END IF;
IF-THEN-ELSE 문은 다음을 수행하여 IF-THEN에 추가됩니다. 대체 문 세트를 지정해야 합니다. 조건이 FALSE로 평가되면 실행됩니다.
부모 ID가 NULL이거나 부모 ID = ''''인 경우
그런 다음 
    전체 이름을 반환합니다.
그 외
    return hp_true_filename(parentid) || ''/'' || 성명;
종료하면;
IF v_count  0 그러면 
    INSERT INTO users_count(count) VALUES(v_count);
    ''t''를 반환합니다;
그 외 
    ''f''를 반환합니다;
종료하면;
    IF 문은 다음과 같이 중첩될 수 있습니다. 예:
IF deco_row.sex = ''m'' THEN
  Pretty_sex := ''남자'';
그 외
  IF deco_row.sex = ''f'' 그러면
    Pretty_sex := ''여자'';
  종료하면;
종료하면;
      이 양식을 사용하면 실제로 IF가 중첩됩니다. 외부 IF 문의 ELSE 부분 내부에 있는 문입니다. 따라서 각 중첩 IF에 대해 하나의 END IF 문이 필요하고 부모 IF-ELSE. 이는 실행 가능하지만 다음과 같은 경우에는 지루해집니다. 확인해야 할 대안이 많이 있습니다.
IF부울 표현식그때문장 [ELSIF부울 표현식그때문장 [ELSIF부울 표현식그때문장 ...]] [ELSE문장 ] 종료하면;
IF-THEN-ELSIF-ELSE는 보다 편리한 방법을 제공합니다. 하나의 명령문에서 여러 대안을 확인합니다. 공식적으로는 그렇죠 중첩된 IF-THEN-ELSE-IF-THEN 명령과 동일하지만 하나의 END IF가 필요합니다.
다음은 예입니다:
IF 숫자 = 0 THEN
    결과 := ''0'';
ELSIF 번호  0 THEN 
    결과 := ''긍정적'';
ELSIF 숫자 < 0 THEN
    결과 := ''부정적'';
그 외
    -- 흠, 유일한 다른 가능성은 숫자가 NULL이라는 것입니다.
    결과 := ''NULL'';
종료하면;
      마지막 ELSE 섹션은 선택사항입니다.
LOOP, EXIT, WHILE 및 FOR 문을 사용하면 다음을 수행할 수 있습니다. 당신을 위해 준비하십시오PL/pgSQL일련의 명령을 반복하는 함수입니다.
[<<라벨]
배트맨 토토문장END LOOP;
      LOOP는 반복되는 무조건 배트맨 토토를 정의합니다. EXIT 또는 RETURN 문에 의해 종료될 때까지 무기한입니다. 선택적 레이블은 중첩된 EXIT 문에서 사용할 수 있습니다. 중첩 수준을 지정하는 배트맨 토토 종료되었습니다.
종료 [ 라벨 ] [언제표현 ];
아니면라벨이 주어지면 가장 안쪽 배트맨 토토가 종료되고 END 다음의 명령문이 실행됩니다. 다음에 LOOP가 실행됩니다. 만일라벨이 주어지면 다음의 라벨이어야 합니다. 중첩된 배트맨 토토나 블록의 현재 또는 일부 외부 수준. 그런 다음 명명된 배트맨 토토 또는 블록이 종료되고 제어가 계속됩니다. 배트맨 토토/블록 다음에 해당하는 명령문이 있는 경우 끝.
WHEN이 존재하는 경우 지정된 경우에만 루프 종료가 발생합니다. 조건이 배트맨 토토ue이면 제어가 명령문으로 전달됩니다. 종료 후.
예:
배트맨 토토
    -- 일부 계산
    IF 개수  0 그러면
        종료;  -- 배트맨 토토 종료
    종료하면;
엔드 배트맨 토토;
배트맨 토토
    -- 일부 계산
    개수  0일 때 종료합니다.
엔드 배트맨 토토;
시작
    -- 일부 계산
    IF 주식  100000 THEN
        종료;  -- 불법적인. LOOP 외부에서는 EXIT를 사용할 수 없습니다.
    종료하면;
끝;
    
[<<라벨]
동안표현배트맨 토토문장END LOOP;
      WHILE 문은 일련의 문을 반복하므로 조건 표현식이 true로 평가되는 한. 는 조건은 배트맨 토토의 각 항목 직전에 확인됩니다. 몸.
예:
채무 금액  0 AND 선물_증명서 잔액  0 LOOP인 동안
    -- 여기에 몇 가지 계산이 있습니다.
엔드 배트맨 토토;
boolean_expression LOOP가 아닌 동안
    -- 여기에 몇 가지 계산이 있습니다.
끝 배트맨 토토;
    [<<라벨] 에 대한이름IN [반전] 표현 .. 표현배트맨 토토문장END LOOP;
이 FOR 형식은 범위를 반복하는 배트맨 토토를 생성합니다. 정수 값. 변수이름자동으로 유형으로 정의됩니다. 정수이며 배트맨 토토 내부에만 존재합니다. 두 가지 표현 범위의 하한과 상한을 제공하면 평가됩니다. 배트맨 토토에 들어갈 때 한 번. 반복 단계는 일반적으로 1이지만 REVERSE가 지정된 경우에는 -1입니다.
정수 FOR 배트맨 토토의 몇 가지 예:
i IN 1..10 배트맨 토토용
  -- 여기에 몇 가지 표현이 있습니다.
    인상 알림 ''i는 %'',i;
엔드 배트맨 토토;
역방향 10..1 배트맨 토토의 i용
    -- 여기에 몇 가지 표현이 있습니다.
끝 배트맨 토토;
    다른 유형의 FOR 배트맨 토토를 사용하면 다음을 반복할 수 있습니다. 쿼리 결과를 확인하고 이에 따라 해당 데이터를 조작합니다. 구문은 다음과 같습니다.
[<<라벨]
에 대한기록 | 행INselect_query배트맨 토토문장END LOOP;
    레코드 또는 행 변수는 모든 항목에 연속적으로 할당됩니다. SELECT 쿼리의 결과 행과 배트맨 토토 본문은 다음과 같습니다. 각 행에 대해 실행됩니다. 예는 다음과 같습니다.
함수 생성 cs_refresh_mviews ()는 정수를 '로 반환합니다.
선언
     mviews 기록;
시작
     PERFORM cs_log(''구체화된 뷰를 새로 고치는 중...'');
     FOR mviews IN SELECT * FROM cs_materialized_views ORDER BY sort_key LOOP
         -- 이제 "mviews"에는 cs_materialized_views의 레코드가 하나 있습니다.
         PERFORM cs_log(''구체화된 뷰 새로 고침 '' || quote_ident(mviews.mv_name) || ''...'');
         실행 ''TRUNCATE TABLE '' || quote_ident(mviews.mv_name);
         ''INSERT INTO'' 실행 || quote_ident(mviews.mv_name) || '' '' || mviews.mv_query;
     엔드 배트맨 토토;
     PERFORM cs_log(''구체화된 뷰 새로 고침이 완료되었습니다.'');
     1을 반환합니다.
끝;
' 언어 'plpgsql';
    배트맨 토토가 EXIT 문에 의해 종료되면 마지막 배트맨 토토 후에도 할당된 행 값에 계속 액세스할 수 있습니다.
FOR-IN-EXECUTE 문은 반복하는 또 다른 방법입니다. 기록:
[<<라벨]
에 대한기록 | 행실행 중텍스트 표현배트맨 토토문장END LOOP;
    이것은 소스를 제외하고 이전 양식과 같습니다. SELECT 문은 문자열 표현식으로 지정됩니다. FOR 배트맨 토토의 각 항목을 평가하고 다시 계획합니다. 이 프로그래머가 미리 계획된 속도를 선택할 수 있습니다. 쿼리 또는 동적 쿼리의 유연성 일반 EXECUTE 문입니다.
참고:그PL/pgSQL파서 현재 두 종류의 FOR 배트맨 토토(정수 또는 레코드 반환) 대상 변수인지 확인하여 FOR가 레코드/행으로 선언된 직후에 언급됨 변수. 그렇지 않은 경우 정수 FOR 배트맨 토토로 추정됩니다. 이로 인해 다소 직관적이지 않은 오류 메시지가 발생할 수 있습니다. 진짜 문제는 예를 들어 FOR의 철자를 잘못 썼다는 것입니다. 변수 이름.