
# 条件语句
条件语句的主要作用判断参数或者语句是否满足已给定的条件，根据判定结果执行相应的操作。
GaussDB有五种形式的IF：
- IF_THEN
  图1IF_THEN::=   
  ![](https://support.huaweicloud.com/centralized-devg-v2-gaussdb/figure/zh-cn_image_0000002220895013.jpg "点击放大")
  IF_THEN语句是IF的最简单形式。如果条件为真，statements将被执行。否则，将忽略它们的结果使该IF_THEN语句执行结束。
  **示例**
  ```
  openGauss=# 
  DECLARE
      v_user_id integer default 1;
  BEGIN
  IF v_user_id <> 0 THEN
      raise info 'v_user_id is NOT 0';
      
  END IF;
  END;
  /
  INFO:  v_user_id is NOT 0
  ```
  
- IF_THEN_ELSE
  图2IF_THEN_ELSE::=   
  ![](https://support.huaweicloud.com/centralized-devg-v2-gaussdb/figure/zh-cn_image_0000002220980577.jpg "点击放大")
  IF_THEN_ELSE语句增加了ELSE的分支，可以声明在条件为假的时候执行的语句。
  **示例**
  ```
  openGauss=# 
  DECLARE
      v_user_id integer default 1;
  BEGIN
      IF v_user_id <> 0 THEN
          raise info 'v_user_id is NOT 0';
      ELSE
          raise info 'v_user_id is 0';
      END IF;
  END;
  /
  INFO:  v_user_id is NOT 0
  ```
  
- IF_THEN_ELSE IF IF语句可以嵌套，嵌套方式如下：
  ```
  openGauss=# 
  DECLARE
      v_user_id integer default 1;
  BEGIN
      IF v_user_id = 0 THEN
          raise info 'v_user_id is  0';
      ELSE
          IF v_user_id > 0 THEN
              raise info 'v_user_id > 0';
          END IF;
      END IF;
  END;
  /
  INFO:  v_user_id > 0
  ```
  这种形式实际上就是在一个IF语句的ELSE部分嵌套了另一个IF语句。因此需要一个END IF语句给每个嵌套的IF，另外还需要一个END IF语句结束父IF-ELSE。如果有多个选项，可使用下面的形式。
  
- IF_THEN_ELSIF_ELSE
  图3IF_THEN_ELSIF_ELSE::=   
  ![](https://support.huaweicloud.com/centralized-devg-v2-gaussdb/figure/zh-cn_image_0000002185454818.png "点击放大")
  **示例**
  ```
  DECLARE
      v_user_id integer default NULL;
  BEGIN
      IF v_user_id = 0 THEN
          raise info 'v_user_id is  0';
      ELSIF v_user_id > 0 THEN
          raise info 'v_user_id > 0';
      ELSIF v_user_id < 0 THEN
          raise info 'v_user_id < 0';
      ELSE
          raise info 'v_user_id is NULL';
      END IF;
  END;
  /
  INFO:  v_user_id is NULL
  ```
  
- IF_THEN_ELSEIF_ELSE ELSEIF是ELSIF的别名。
  综合示例
  ```
  CREATE OR REPLACE PROCEDURE proc_control_structure(i in integer) 
  AS
      BEGIN
          IF i > 0 THEN
              raise info 'i:% is greater than 0. ',i; 
          ELSIF i < 0 THEN
              raise info 'i:% is smaller than 0. ',i; 
          ELSE
              raise info 'i:% is equal to 0. ',i; 
          END IF;
          RETURN;
      END;
  /
  CALL proc_control_structure(3);
  --删除存储过程
  DROP PROCEDURE proc_control_structure;
  ```
  
 
