微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有自定义分组列的 Oracle 身份列

如何解决带有自定义分组列的 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 帐户 employee6​​d> 史黛西
radmon7 帐户 employee7 乔丹
radmon8 帐户 employee8 employee6​​d> 米奇
radmon9 帐户 employee9 employee6​​d> 作者
radmon10 帐户 员工10 employee6​​d> 戈尔丹

我想向表格中添加另一列,以便仅向经理提供序列 (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 帐户 employee6​​d> 史黛西 1
radmon7 帐户 employee7 乔丹 2
radmon8 帐户 employee8 employee6​​d> 米奇
radmon9 帐户 employee9 employee6​​d> 作者
radmon10 帐户 员工10 employee6​​d> 戈尔丹

我尝试使用在 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 举报,一经查实,本站将立刻删除。