
# 条件语句
条件语句的主要作用是判断参数或者语句是否满足已给定的条件，根据判定结果执行相应的操作。
DWS有五种形式的IF：
- IF_THEN
  图1IF_THEN::=   
  ![](https://support.huaweicloud.com/devg-dws/figure/zh-cn_image_0000001764492144.jpg "点击放大")
  IF_THEN语句是IF的最简单形式。如果条件为真，statements将被执行。否则，将忽略它们的结果使该IF_THEN语句执行结束。
  **示例**
  ```
  IF v_user_id <> 0 THEN
      UPDATE users SET email = v_email WHERE user_id = v_user_id;
  END IF;
  ```
  
- IF_THEN_ELSE
  图2IF_THEN_ELSE::=   
  ![](https://support.huaweicloud.com/devg-dws/figure/zh-cn_image_0000001764492148.jpg "点击放大")
  IF_THEN_ELSE语句增加了ELSE的分支，可以声明在条件为假的时候执行的语句。
  **示例**
  ```
  IF parentid IS NULL OR parentid = ''
  THEN
      RETURN;
  ELSE
      hp_true_filename(parentid);--表示调用存储过程
  END IF;
  ```
  
- IF_THEN_ELSE IF IF语句可以嵌套，嵌套方式如下：
  ```
  IF gender = 'm' THEN
      pretty_gender := 'man';
  ELSE
      IF gender = 'f' THEN
          pretty_gender := 'woman';
      END IF;
  END IF;
  ```
  这种形式实际上就是在一个IF语句的ELSE部分嵌套了另一个IF语句。因此需要给每个嵌套的IF一个END IF语句，另外还需要一个END IF语句结束父IF-ELSE。如果有多个选项，可使用IF_THEN_ELSIF_ELSE形式。
  
- IF_THEN_ELSIF_ELSE
  图3IF_THEN_ELSIF_ELSE::=   
  ![](https://support.huaweicloud.com/devg-dws/figure/zh-cn_image_0000001811610493.png "点击放大")
  **示例**
  ```
  IF number_tmp = 0 THEN
      result := 'zero';
  ELSIF number_tmp > 0 THEN 
      result := 'positive';
  ELSIF number_tmp < 0 THEN
      result := 'negative';
  ELSE
      result := 'NULL';
  END IF;
  ```
  
- 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;
  ```
  
 
