为什么这段代码不会进入PL / SQL的IF块?

时间:2015-10-20 22:22:27

标签: oracle plsql null

我有PL / SQL代码,这不会进入IF块。为什么这不会进入IF Block?

感谢您的回复。

DateTime

2 个答案:

答案 0 :(得分:6)

看起来你在比较空值时会被绊倒。 Oracle在后台将空字符串转换为Null。有关详细信息,请参阅here

IF语句最终解析为IF null = null,这是永远不会的。

这样的事情会起作用

IF p_DataCenterID  IS NOT NULL  THEN
   --assert the values are within a range
ELSE
   --look up the value
END IF;

答案 1 :(得分:2)

在PL / SQL和Oracle数据库中,空字符串('')与NULL相同,因此您必须使用IS NULL测试而不是NULL来测试它= NULL= ''。尝试运行以下内容:

declare
  p_DataCenterID   varchar2(50) := '';  -- NOTE: '' is the same as NULL
  p_dcID           varchar2(50);
BEGIN
  dbms_output.put_line( 'test');

  -- Check if DataCenterId is null

  IF p_DataCenterID IS NULL THEN
    dbms_output.put_line('DataCenterID is empty');

    SELECT DataCenterId
      INTO p_dcID  
      FROM Pod_Tab 
      WHERE URL = 'dit3.ezlm.adp.com' 
        AND ROWNUM = 1;
  END IF;
END;
/

这将打印

test
DataCenterID is empty

祝你好运。