如何解决带有自定义分组列的 Oracle 身份列
我正在处理一个要求,我需要在一行中填充唯一 常量标识符,该行是经理行并且在每个部门中都是唯一的。我的表结构是
CREATE
TABLE TEST_ORGANIZATION
(
EMPLOYEE_ID NUMBER NOT NULL,MANAGER_ID NUMBER,FirsT_NAME VARCHAR2(256),DEPARTMENT_ID VARCHAR2(28) NOT NULL,UUID VARCHAR2(28),PRIMARY KEY(UUID)
);
此表包含的信息为。
UUID | DEPARTMENT_ID | EMPLOYEE_ID | MANAGER_ID | FirsT_NAME |
---|---|---|---|---|
radmon1 | 金融 | 员工1 | 约翰 B | |
radmon2 | 金融 | employee2 | 员工1 | 迈克尔 |
radmon3 | 金融 | employee3 | 员工1 | 罗纳尔多 |
radmon4 | 金融 | employee4 | 员工1 | 托马斯 |
radmon5 | 金融 | employee5 | 珀西 | |
radmon6 | 帐户 | employee6d> | 史黛西 | |
radmon7 | 帐户 | employee7 | 乔丹 | |
radmon8 | 帐户 | employee8 | employee6d> | 米奇 |
radmon9 | 帐户 | employee9 | employee6d> | 作者 |
radmon10 | 帐户 | 员工10 | employee6d> | 戈尔丹 |
我想向表格中添加另一列,以便仅向经理提供序列 (where Manager_ID is null
)。但是,该序列应与 DEPARTMENT_ID
ALTER TABLE TEST_ORGANIZATION ADD SEQUENCE_ID NUMBER
UUID | DEPARTMENT_ID | EMPLOYEE_ID | MANAGER_ID | FirsT_NAME | SEQUENCE_ID |
---|---|---|---|---|---|
radmon1 | 金融 | 员工1 | 约翰 B | 1 | |
radmon2 | 金融 | employee2 | 员工1 | 迈克尔 | |
radmon3 | 金融 | employee3 | 员工1 | 罗纳尔多 | |
radmon4 | 金融 | employee4 | 员工1 | 托马斯 | |
radmon5 | 金融 | employee5 | 珀西 | 2 | |
radmon6 | 帐户 | employee6d> | 史黛西 | 1 | |
radmon7 | 帐户 | employee7 | 乔丹 | 2 | |
radmon8 | 帐户 | employee8 | employee6d> | 米奇 | |
radmon9 | 帐户 | employee9 | employee6d> | 作者 | |
radmon10 | 帐户 | 员工10 | employee6d> | 戈尔丹 |
我尝试使用在 oracle 12/19c 之后添加的序列和标识列。
我可以从后端服务以编程方式更新SEQUENCE_ID
使用Select NVL(MAX(SEQUENCE_ID),0) + 1 FROM TEST_ORGANIZATION WHERE MANAGER_ID is NULL AND DEPARTMENT_ID = ?
查询。但是,我想知道 Oracle 19c 中是否有任何函数可以在数据库端本身处理这种行为。
解决方法
试试这个:
SELECT d1.*,1 AS f,CASE WHEN manager_id is null then
RANK() OVER (partition by department_ID order by manager_id nulls first,employee_id)
end as sequenc
FROM (
SELECT 'radmon1' AS UUID,'finance' AS DEPARTMENT_ID,'employee1' AS EMPLOYEE_ID,'' AS MANAGER_ID,'John B' AS FIRST_NAME from dual UNION ALL
SELECT 'radmon2','finance','employee2','employee1','Michal' from dual UNION ALL
SELECT 'radmon3','employee3','Ronaldo' from dual UNION ALL
SELECT 'radmon4','employee4','Thomas' from dual UNION ALL
SELECT 'radmon5','employee5','','Percey' from dual UNION ALL
SELECT 'radmon6','account','employee6','Stacy' from dual UNION ALL
SELECT 'radmon7','employee7','Jordan' from dual UNION ALL
SELECT 'radmon8','employee8','Micky' from dual UNION ALL
SELECT 'radmon9','employee9','Author' from dual UNION ALL
SELECT 'radmon10','employee10','Gordan' from dual
)d1;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。