2017-06-06 182 views
2

我有表有3行,ID,GROUP_NAMEPARENT_GROUP_ID,表本身提供了基本的組子組功能。例如:如果我的組名是 - 「First Group」,ID = 1,並且它有一個名爲「Sub Group」的ID = 2,PARENT_GROUP_ID = 1的子組;這意味着子組是具有ID = 1。我的問題該組的子組是我有一個程序,根據參數它加載數據(pn_parent_group_id是一個數字)Oracle中的SQL查詢where子句

CURSOR c1 IS 
SELECT * FROM GROUPS WHERE PARENT_GROUP_ID = pn_parent_group_id; 

這個查詢作品很好,當我發送任何pn_parent_group_id進程序,並找到所有必要的子組,但是當我發送NULL到pn_parent_group_id它工作錯誤,因爲它應該返回那些沒有parent_group_id(意味着只有父組)。我知道我的解釋缺乏,但我希望你有想法,任何幫助將不勝感激!

回答

5

Null永遠不會等於null。所以你需要爲你的遊標添加一個明確的null測試。

CURSOR c1 IS 
    SELECT * FROM GROUPS 
    WHERE PARENT_GROUP_ID = pn_parent_group_id 
    or (pn_parent_group_id is null and parent_group_id is null); 
+0

偉大的解決方案,完美地工作 – Hatik

1

您可能感興趣的SYS_OP_MAP_NONNULL功能,可以比較NULL = NULLTRUE

CURSOR c1 IS 
    SELECT * FROM GROUPS 
    WHERE SYS_OP_MAP_NONNULL(parent_group_id) = SYS_OP_MAP_NONNULL(pn_parent_group_id); 

此功能並不直接記錄Oracle文檔中,但不會出現話題文檔中 - 因爲它已經存在了很長一段時間,我覺得不太可能會被刪除。一如以往,請自行決定使用。