배트맨 토토 구조는 아마도 가장 유용 할 것입니다 (및 중요)의 일부pl/pgsql. 와 함께pl/pgsql의 배트맨 토토 구조, 당신은 조작 할 수 있습니다PostgreSQL매우 유연한 데이터 강력한 방법.
return표현;
함수가 종료되고 값표현상단으로 반환됩니다 집행자. 표현식의 결과는 자동으로 캐스팅됩니다 설명 된대로 함수의 리턴 유형으로 과제.
함수의 반환 값은 정의되지 않은 상태로 남을 수 없습니다. 만약에 배트맨 토토는 함수의 최상위 블록의 끝에 도달합니다. Return 문에 도달하지 않으면 런타임 오류가 발생합니다 발생하다.
if
진술을 실행할 수 있습니다
특정 조건에 따라 명령.pl/pgsqlif-then, if-then, 4 가지 형태가 있습니다.
if-then-else, if-then-else if, if-then-elsif-then-else.
if부울-표현the진술END IF;
if-then 진술은 IF의 가장 간단한 형태입니다. 그만큼 그때와 종료 사이의 진술은 조건은 사실입니다. 그렇지 않으면 건너 뜁니다.
if v_user_id < 0이면 사용자 업데이트는 이메일 = v_email user_id = v_user_id를 설정합니다. 끝 If;
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;
다음과 같이 진술을 중첩 할 수있는 경우 예:
if demo_row.sex = ''m ''라는 경우 pretty_sex : = ''man ''; 또 다른 demo_row.sex = ''f ''라는 경우 pretty_sex : = ''여자 ''; 끝 IF; 끝 If;
이 양식을 사용하면 실제로 IF 중첩을 사용합니다. 외부 IF 문의 다른 부분 내부의 진술. 따라서 각 중첩 된 if에 대해 한쪽 끝이 필요합니다. 부모의 경우 부모. 이것은 실행 가능하지만 언제 지루합니다 확인해야 할 대안이 많이 있습니다.
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;
최종 다른 섹션은 선택 사항입니다.
배트맨 토토를 사용하여 종아리를 마시면 당신의 준비pl/pgsql일련의 명령을 반복하는 기능.
[<< 레이블 ]
고리진술엔드 배트맨 토토;
배트맨 토토는 반복되는 무조건 배트맨 토토를 정의합니다 출구 또는 반환 명세서에 의해 종료 될 때까지 무기한. 옵션 레이블은 중첩의 종료 명세서에서 사용할 수 있습니다. 어떤 레벨의 중첩이어야하는지 지정하는 배트맨 토토 종료.
출구 [ 레이블 ] [언제표현 ];
NO레이블가 제공됩니다 가장 안쪽 배트맨 토토가 종료되고 끝난 후에는 진술이 종료됩니다 배트맨 토토는 다음에 실행됩니다. 만약에레이블주어지면 레이블이어야합니다 중첩 배트맨 토토 또는 블록의 전류 또는 일부 외부 레벨. 그 다음에 명명 된 배트맨 토토 또는 블록이 종료되고 제어가 계속됩니다. 배트맨 토토/블록의 해당 후 명세서와 함께 끝.
현재 존재하는 경우 배트맨 토토 출구가 지정된 경우에만 발생합니다. 조건은 사실입니다. 그렇지 않으면 제어가 진술로 전달됩니다 출구 후.
예 :
배트맨 토토 - 일부 계산 count 0이면 출구; - 종료 배트맨 토토 끝 IF; 엔드 배트맨 토토; 고리 - 일부 계산 count 0 일 때 종료; 엔드 배트맨 토토; 시작하다 - 일부 계산 주식이 100000이면 출구; -- 불법적인. 배트맨 토토 외부에서 종료를 사용할 수 없습니다 끝 IF; 끝;
[<< 레이블 ]
하는 동안표현loop진술엔드 배트맨 토토;
while 진술은 일련의 진술을 반복합니다 조건 표현이 True로 평가되는 한. 그만큼 배트맨 토토에 입력하기 직전에 조건이 확인됩니다. 몸.
예 :
while Voll_owed 0 및 Gift_certificate_balance 0 배트맨 토토 - 여기에 일부 계산 엔드 배트맨 토토; Boolean_expression 배트맨 토토는 아닙니다 - 여기에 일부 계산 엔드 배트맨 토토;
[<< 레이블 ] 을 위한이름in [Reverse]표현 .. 표현loop진술엔드 배트맨 토토;
이 형태의 For는 범위에 반복되는 배트맨 토토를 만듭니다. 정수 값의. 변수이름는 자동으로 유형으로 정의됩니다 정수와 배트맨 토토 내부에만 존재합니다. 두 표현 범위의 하단 및 상한을 제공하는 것이 평가됩니다. 배트맨 토토에 들어가면 한 번. 반복 단계는 일반적으로입니다 1, 반전이 지정 될 때 -1입니다.
배트맨 토토에 대한 정수의 일부 예 :
I의 경우 1..10 배트맨 토토 - 여기에 일부 표현 통지``나는 %'', i; 엔드 배트맨 토토; 반전 10..1 배트맨 토토 - 여기에 일부 표현 엔드 배트맨 토토;
다른 유형의 배트맨 토토 사용을 통해 반복 할 수 있습니다. 쿼리의 결과와 그에 따라 해당 데이터를 조작합니다. 구문은 다음과 같습니다.
[<< 레이블 ]
을 위한레코드 | 열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현재 파서 두 종류의 배트맨 토토 (정수 또는 대상 변수 여부를 확인하여 레코드 반복) 직후에 언급 된 기록/행으로 선언되었습니다. 변하기 쉬운. 그렇지 않다면, 그것은 배트맨 토토의 정수로 추정됩니다. 이로 인해 직관적이지 않은 오류 메시지가 발생할 수 있습니다 진정한 문제는 변수 이름.