SQL查询在Oracle where子句中

时间:2017-06-06 04:17:05

标签: sql oracle where

我的表格群组包含3行IDGROUP_NAMEPARENT_GROUP_ID,表格本身就是基本的群组 - 子群组功能。示例是:如果我的组名是 - &#34; First Group&#34; ID = 1,它有一个名为&#34; Sub Group&#34;的子组。 ID = 2,PARENT_GROUP_ID = 1;这意味着子组是ID = 1的组的子组。我的问题是我有一个过程,它根据参数加载数据(pn_parent_group_id是一个数字)< / p>

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

当我将任何pn_parent_group_id发送到过程中时,此查询工作正常,并且它找到所有必需的子组,但是当我向pn_parent_group_id发送NULL时,它的工作错误,因为它应该返回没有parent_group_id的那些(仅表示父母团体)。我知道我的解释不足,但我希望你有这个想法,任何帮助都会受到赞赏!

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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文档中直接记录,但确实出现在主题文档中 - 因为它已存在很长一段时间,我认为它不太可能被删除。与往常一样,请自行决定使用。