2015-10-20 46 views
1

我有下面的PL/SQL代碼,這不會進入中頻塊。爲什麼這不會進入IF模塊?爲什麼這段代碼不會進入PL/SQL中的IF塊?

欣賞您的回覆。

DECLARE 
    p_datacenterid VARCHAR2(50) := ''; 
    p_dcid   VARCHAR2(50); 
BEGIN 
    dbms_output.put_line('test'); 
    -- Check if DataCenterId is null 
    IF nvl(p_datacenterid, '') = '' 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; 
/

回答

2

在PL/SQL和Oracle數據庫中的空字符串('')是一樣的NULL,因此你必須爲你會爲使用NULL測試它IS 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 

好運。

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; 
+0

我也試過上面的IF。仍然沒有進入IF LOOP。 – Rita

+0

你的代碼@Rita沒有循環...所以你不清楚你在問什麼。正如Bob在下面演示的,這個答案很有效......所以你必須更加具體地說明什麼是不正確的。 – Ben