我在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;
答案 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 ...
永远不会是真的。