我的IF语句无法检测到可修改的差异

时间:2016-03-07 21:43:35

标签: oracle plsql

我在PLSQL中有以下代码。 我不确定为什么IF声明没有被解雇。 curr_app和the_app变量不同,但if语句中的dbms输出永远不会被触发。

DECLARE
the_app VARCHAR2(200);
curr_app VARCHAR2(200);

BEGIN
  the_app :='';
  curr_app :='';
  FOR i IN
  (SELECT APP_NAME,CONTACT_TYPE,CONTACT_DEPT,CONTACT_VALUE
  FROM CMSv2.CMS_APPLICATIONS CMSA
  LEFT JOIN CMSV2.CMS_APP_CONTACTS CMSAC
  ON CMSa.APP_NAME = CMSAC.CONTACT_APP and (CMSAC.END_DT IS NULL and CMSAC.RET_DT IS NULL)
  WHERE CMSA.END_DT IS NULL
  AND CMSA.RET_DT IS NULL ORDER BY APP_NAME
  )
  LOOP
  curr_app := i.APP_NAME;
  dbms_output.put_line('curr_app' || curr_app);
  dbms_output.put_line('the_app' || the_app);
  IF the_app<>curr_app THEN
    dbms_output.put_line('doservers for' || i.APP_NAME);
  END IF;
  dbms_output.put_line(i.APP_NAME);

  END LOOP;
END;

1 个答案:

答案 0 :(得分:1)

在Oracle中,空字符串相当于NULL

用于比较BOOLEAN s之间差异的真值表是:

A <> B | TRUE  | FALSE | NULL
-------+-------+-------+-------
TRUE   | FALSE | TRUE  | NULL
FALSE  | TRUE  | FALSE | NULL
NULL   | NULL  | NULL  | NULL

因此,您的IF条件可以简化为:

IF( something <> NULL ) THEN ...

永远不会是真的。