我的表格群组包含3行ID
,GROUP_NAME
和PARENT_GROUP_ID
,表格本身就是基本的群组 - 子群组功能。示例是:如果我的组名是 - " First Group" ID = 1,它有一个名为" Sub Group"的子组。 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的那些(仅表示父母团体)。我知道我的解释不足,但我希望你有这个想法,任何帮助都会受到赞赏!
答案 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 = NULL
为TRUE
。
CURSOR c1 IS
SELECT * FROM GROUPS
WHERE SYS_OP_MAP_NONNULL(parent_group_id) = SYS_OP_MAP_NONNULL(pn_parent_group_id);
此功能未在Oracle文档中直接记录,但确实出现在主题文档中 - 因为它已存在很长一段时间,我认为它不太可能被删除。与往常一样,请自行决定使用。