带有自定义分组列的oracle标识列

icomxhvb  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(237)

我正在处理一个需求,我需要在一行上填充一个uniqueconstant标识符,该行是经理行,在每个部门中都是唯一的。我的表结构是

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)
  );

此表包含以下信息。
部门员工经理第一个名字财务员工约翰Bradmon2财务雇员2雇员1人力资源3财务雇员3雇员1人力资源4财务雇员4雇员1人力资源管理5财务雇员5人力资源6会计雇员6 Stacyradmon7会计雇员7 Jordanmon8会计雇员8雇员6人力资源6会计雇员6人力资源10会计雇员6 Gordan
我想向表中添加另一列,以便仅向经理提供序列( where Manager_ID is null ). 但是,序列应该按照
DEPARTMENT_ID ALTER TABLE TEST_ORGANIZATION ADD SEQUENCE_ID NUMBER UUID部门\员工\经理\第一个\名字顺序\管理1财务员工1约翰B12财务员工2员工1人力资源财务员工3员工1人力资源财务员工4员工1人力资源财务员工4员工1人力资源财务员工5人力资源财务员工6人力资源财务员工8人力资源财务员工8人力资源财务员工6人力资源会计员工6人力资源会计员工6人力资源会计员工10人力资源会计员工10
我尝试使用oracle12/19c之后添加的sequence和identity列。
我可以通过编程从后端服务和更新它 SEQUENCE_ID 使用 Select NVL(MAX(SEQUENCE_ID), 0) + 1 FROM TEST_ORGANIZATION WHERE MANAGER_ID is NULL AND DEPARTMENT_ID = ? 查询。但是,我想知道在oracle19c中是否有任何函数可以处理数据库本身的这种行为。

qnyhuwrf

qnyhuwrf1#

试试这个:

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','finance','employee3','employee1','Ronaldo'    from dual UNION ALL
         SELECT 'radmon4','finance','employee4','employee1','Thomas'     from dual UNION ALL
         SELECT 'radmon5','finance','employee5','','Percey'         from dual UNION ALL
         SELECT 'radmon6','account','employee6','','Stacy'              from dual UNION ALL
         SELECT 'radmon7','account','employee7','','Jordan'            from dual UNION ALL
         SELECT 'radmon8','account','employee8','employee6','Micky'      from dual UNION ALL
         SELECT 'radmon9','account','employee9','employee6','Author'     from dual UNION ALL
         SELECT 'radmon10','account','employee10','employee6','Gordan'   from dual
       )d1;

相关问题