PostgreSQL if文のサンプル(PL/pgSQL)

PostgreSQLのPL/pgSQLのif文のサンプルです。

確認環境
・PostgreSQL 11.2
・Windows 10

目次

if文 if文
  ネストの構造 if文の中にif文
演算子 論理演算子の論理積(AND) AかつB
  論理演算子の論理和(OR) AまたはB
  論理演算子の否定(NOT) Aではない
  NULLとの比較

if文

IF (条件) THEN
  処理
ELSIF (条件) THEN
  処理
ELSE
  処理
END IF;
  • 条件が合致する場合、配下の処理が実行され、if文の処理は終了します。
  • 条件が合致することをtrue(真)ともいいます。
  • 条件が合致しない場合、配下の処理は実行されず、その下(elsif/else)に進みます。
  • 条件が合致しないことをfalse(偽)ともいいます。
  • elsifは、1つ以上記述できます。省略可能です。ELSE IFでも可能です。
  • elseは、1つのみ記述できます。省略可能です。elseの配下の処理は、どの条件も合致しなかったときに実行されます。
  • 以下は、PostgreSQL公式の制御構造のリンクです。
    https://www.postgresql.jp/document/8.2/html/plpgsql-control-structures.html

if文のサンプルです。

CREATE OR REPLACE PROCEDURE test1() 
AS $$
DECLARE
  a int;
BEGIN
  a:= 1;

  IF (a = 0) THEN
    RAISE INFO '0';
	
  ELSIF a = 1 THEN
    RAISE INFO '1'; -- 1が出力される
	
  ELSE
    null;
  END IF;
END;
$$
LANGUAGE plpgsql;

4行目は、変数に値をセットしています。
8行目からif文が始まります。if文の条件にかっこ()をつけることもできます。11行目ではかっこをつけていません。
11行目のif文はtrueになるのでその配下の処理が実行されます。ELSIFではなく、ELSE IFでも可能です。
12行目の処理が実行されif文を抜けます。
15行目のnullは、処理を何も行いません。

ネストの構造  if文の中にif文

ネストの構造のサンプルです。

CREATE OR REPLACE PROCEDURE test1() 
AS $$
DECLARE
  a int;
  b int;  
BEGIN
  a:= 1;
  b:= 1;  

  IF (a = 1) THEN
    IF (a = 1) THEN
      RAISE INFO '1'; -- 出力される
    END IF;
  END IF;
END;
$$
LANGUAGE plpgsql;

11行目のように、if文の中にif文を記述することができます。ネストの構造です。入れ子ともいいます。

 

論理演算子の論理積(AND) AかつB

if (左の条件式) AND (右の条件式)
  • 論理積(AND)の左の式と右の式の両方が条件に合致する場合にtrueになります。
CREATE OR REPLACE PROCEDURE test1() 
AS $$
DECLARE
  a int;
  b int;  
BEGIN
  a:= 1;
  b:= 0;  

  IF (a = 1) AND (b = 0) THEN
      RAISE INFO 'OK'; -- 出力される
  END IF;
END;
$$
LANGUAGE plpgsql;

10行目は、左の式と右の式が共にtrueなので、trueになります。

 

論理演算子の論理和(OR) AまたはB

if (左の条件式) OR (右の条件式)
  • 論理和(OR)の左の式または右の式のどちらかが条件に合致する場合にtrueになります。
CREATE OR REPLACE PROCEDURE test1() 
AS $$
DECLARE
  a int;
  b int;  
BEGIN
  a:= 2;
  b:= 0;  

  IF (a = 1) OR (b = 0) THEN
      RAISE INFO 'OK'; -- 出力される
  END IF;
END;
$$
LANGUAGE plpgsql;

10行目は、左の式はfalseですが右の式がtrueなのでtrueになります。

 

論理演算子の否定(NOT) Aではない

if  NOT(条件式) 
  • 条件式がfalseの場合にtrueになります。
  • 条件式がtrueの場合にfalseになります。
CREATE OR REPLACE PROCEDURE test1() 
AS $$
DECLARE
  a int;
BEGIN
  a:= 9; 

  IF NOT (a = 9) THEN
      RAISE INFO 'OK';
  ELSE
      RAISE INFO 'NG'; -- 出力される
  END IF;
END;
$$
LANGUAGE plpgsql;

8行目は値の比較でtrueになり、それを否定するのでfalseになります。

以下の1行目のように!=でも否定になります。

  IF (a != 9) THEN
      RAISE INFO 'OK';
  ELSE
      RAISE INFO 'NG'; -- 出力される
  END IF;

NULLとの比較

NULLとの比較のサンプルです。

CREATE OR REPLACE PROCEDURE test1(id1 int) 
AS $$
DECLARE
  str1 varchar(20);
BEGIN
  select romaji into str1 from SYAIN
  where ID = id1;
  
  IF str1 IS NULL THEN
    RAISE INFO 'NULLです';
  END IF;

  IF str1 IS NOT NULL THEN
    RAISE INFO 'NULLではありません';
  END IF;
END;
$$
LANGUAGE plpgsql;

9行目は、is nullで値がnullか確認しています。
13行目は、is not nullで値がnullでないことを確認しています。

関連の記事

PostgreSQL プロシージャのサンプル(PL/pgSQL)
PostgreSQL ファンクションのサンプル(PL/pgSQL)

△上に戻る