SQL Oracle where 子句中的查询
SQL Query in Oracle where clause
我有 table Groups 有 3 行,ID
、GROUP_NAME
和 PARENT_GROUP_ID
,table 本身提供了基本的组-子组功能。示例是:如果我的组名称是 - "First Group",ID = 1,并且它有一个名为 "Sub Group" 的子组,ID = 2,并且 PARENT_GROUP_ID = 1;这意味着 Sub Group 是 ID = 1 组的子组。我的问题是我有一个程序,它根据参数加载数据(pn_parent_group_id
是一个数)
CURSOR c1 IS
SELECT * FROM GROUPS WHERE PARENT_GROUP_ID = pn_parent_group_id;
当我将任何 pn_parent_group_id
发送到过程中时,此查询工作正常,它找到所有必要的子组,但是当我将 NULL 发送到 pn_parent_group_id 时,它工作错误,因为它应该 return 那些没有 parent_group_id 的(意味着只有父组)。我知道我的解释不够,但我希望你明白了,任何帮助将不胜感激!
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);
您可能对 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 文档中,但确实出现在主题文档中 - 因为它已经存在了很长时间,所以我认为它不太可能被删除。一如既往地使用这些东西,请自行决定使用。
我有 table Groups 有 3 行,ID
、GROUP_NAME
和 PARENT_GROUP_ID
,table 本身提供了基本的组-子组功能。示例是:如果我的组名称是 - "First Group",ID = 1,并且它有一个名为 "Sub Group" 的子组,ID = 2,并且 PARENT_GROUP_ID = 1;这意味着 Sub Group 是 ID = 1 组的子组。我的问题是我有一个程序,它根据参数加载数据(pn_parent_group_id
是一个数)
CURSOR c1 IS
SELECT * FROM GROUPS WHERE PARENT_GROUP_ID = pn_parent_group_id;
当我将任何 pn_parent_group_id
发送到过程中时,此查询工作正常,它找到所有必要的子组,但是当我将 NULL 发送到 pn_parent_group_id 时,它工作错误,因为它应该 return 那些没有 parent_group_id 的(意味着只有父组)。我知道我的解释不够,但我希望你明白了,任何帮助将不胜感激!
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);
您可能对 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 文档中,但确实出现在主题文档中 - 因为它已经存在了很长时间,所以我认为它不太可能被删除。一如既往地使用这些东西,请自行决定使用。