【发布时间】:2022-01-14 23:38:26
【问题描述】:
我是 Oracle 的新手,需要一些关于 SQL Server 在 Oracle 中的 IF NOT EXISTS 等效项的帮助。 如果特定角色不存在,我需要根据实体编号从角色表中找到最大角色 ID。我在下面创建了查询,但它失败(如果实体具有特定角色,它应该返回 null,如果实体没有角色,它应该返回 1,在两种情况下都返回 1)如果实体没有有任何作用。
代码:-
SELECT NVL(MAX(role_id), 0) + 1 AS RoleID from roles WHERE entity_no = '000001'
AND
NOT EXISTS (
SELECT 1
FROM roles
WHERE entity_no = '000001' AND name = 'Survey'
)
如果一个实体没有任何角色,我需要 1 作为 RoleID,但它应该为具有该特定角色('Survey')的实体返回 null,否则返回最大 RoleID,增量为 TIA。
【问题讨论】:
-
除了对
NVL()的调用之外,您的查询符合 ANSI 标准并且应该适用于 Oracle(以及许多其他数据库)。 -
在没有 NVL 的情况下也尝试过,但如果实体具有该角色并且实体没有角色,则会得到相同的结果。
-
嗨 Sunil,你所说的“失败”是什么意思?
-
嗨@ekochergin,如果实体具有特定角色,它应该返回null,如果实体没有角色,它应该返回1。还更新了问题。
-
如果您使用它来生成序列,那么为什么不使用序列呢?您可能不得不接受序列中会有间隙,但如果同时启动两个查询以生成
MAX并最终得到重复值,这将比使用MAX和存在并发问题要好。