我是 Oracle 的新手,需要一些幫助來了解 Oracle 中 SQL Server 的IF NOT EXISTS等效項。如果特定角色不存在,我需要根據實體編號從 Role 表中找到最大 RoleID。我創建了下面的查詢,但它失敗(如果實體具有特定角色,它應該返回 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,但它應該為具有該特定角色的實體返回 null('Survey'),否則返回最大 RoleID 增量,TIA。
這行嗎?閱讀代碼中的註釋。
SQL> with
2 roles (role_id, entity_no, name) as
3 -- sample data
4 (select 1, '00001', 'Survey' from dual union all
5 select 2, '00002', 'xxx' from dual
6 ),
7 temp as
8 -- does ENITITY_NO has role for NAME = Survey? If so, CNT = 1; else, CNT = 0
9 (select entity_no,
10 sum(case when name = 'Survey' then 1 else 0 end) cnt
11 from roles
12 group by entity_no
13 )
14 -- finally, check CNT value and return the result
15 select case when t.cnt = 0 then 1 else null end as role_id
16 from roles r join temp t on t.entity_no = r.entity_no
17 where r.entity_no = '&par_entity_no';
Enter value for par_entity_no: 00001
ROLE_ID
----------
SQL> /
Enter value for par_entity_no: 00002
ROLE_ID
----------
1
SQL>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句