【发布时间】:2021-07-14 13:19:36
【问题描述】:
我正在处理一个要求,我需要在作为经理行且在每个部门中唯一的行上填充 唯一 常量标识符强>。我的表结构是
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 | finance | employee1 | John B | |
| radmon2 | finance | employee2 | employee1 | Michal |
| radmon3 | finance | employee3 | employee1 | Ronaldo |
| radmon4 | finance | employee4 | employee1 | Thomas |
| radmon5 | finance | employee5 | Percey | |
| radmon6 | account | employee6 | Stacy | |
| radmon7 | account | employee7 | Jordan | |
| radmon8 | account | employee8 | employee6 | Micky |
| radmon9 | account | employee9 | employee6 | Author |
| radmon10 | account | employee10 | employee6 | Gordan |
我想在表格中添加另一列,以便仅向经理提供序列 (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 | finance | employee1 | John B | 1 | |
| radmon2 | finance | employee2 | employee1 | Michal | |
| radmon3 | finance | employee3 | employee1 | Ronaldo | |
| radmon4 | finance | employee4 | employee1 | Thomas | |
| radmon5 | finance | employee5 | Percey | 2 | |
| radmon6 | account | employee6 | Stacy | 1 | |
| radmon7 | account | employee7 | Jordan | 2 | |
| radmon8 | account | employee8 | employee6 | Micky | |
| radmon9 | account | employee9 | employee6 | Author | |
| radmon10 | account | employee10 | employee6 | Gordan |
我尝试使用在 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 中是否有任何函数可以在数据库端本身处理这种行为。
【问题讨论】:
-
这个 sequence_id 列的目的是什么?它是约束的一部分,还是出于显示目的?您始终可以向表中添加一个虚拟列,通过分析函数即时生成值,但这不是永久值,每次查询该列时都会计算它。
-
在经理行的行上要有一个唯一的标识符,在每个部门都是唯一的。
标签: java oracle max identity-column oracle19c