首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在oracle19c中设置自动增量复合主键?

如何在oracle19c中设置自动增量复合主键?
EN

Stack Overflow用户
提问于 2021-06-10 04:41:45
回答 2查看 258关注 0票数 0

我希望在Oracle 19c中创建一个具有复合主键和自动增量的表,如下所示:

代码语言:javascript
复制
pk01 pk02 column1
==== ==== =======
1    1    abc
1    2    def
1    3    ghi
2    1    jkl
2    2    mno
3    1    pqr
1    4    stu

我是怎么做到的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-10 05:16:24

在此表上创建触发器以实现此结果。假设表名为test123

代码语言:javascript
复制
create or replace trigger trg_test123 before insert on test123
for each row
declare
v_id1 number;
v_max_id2 number;
begin
v_id1 := :new.id1;
select nvl(max(id2), 0) into v_max_id2 from test123 where id1 = v_id1;
v_max_id2 := v_max_id2 +1;
:new.id2 := v_max_id2;
end;
票数 0
EN

Stack Overflow用户

发布于 2021-06-10 05:21:45

为什么不创建单个列的pk00作为pk,并将其设置为用于存储目的的自动增量?也就是说,像往常一样插入pk01密钥(您需要使用它)。表中没有pk02,而是在查询时使用window函数表达式创建它:pk00(按pk01 order )作为pk02进行分区。

. column1 =‘column1 10’>.

其余的应用程序使用对表的查询,如下所示。

#######################

代码语言:javascript
复制
drop table table00;

create table table00 (
pk00 NUMBER GENERATED BY DEFAULT AS IDENTITY(START with 1 INCREMENT by 1),
pk01 number,
column1 varchar2(5),
column2 varchar2(5)
);


truncate table table00;

begin
insert into table00(pk01, column1, column2) values(1, 'abc', 'yest');
insert into table00(pk01, column1, column2) values(1, 'def', 'yest');
insert into table00(pk01, column1, column2) values(1, 'ghi', 'yest');
insert into table00(pk01, column1, column2) values(2, 'jkl', 'today');
insert into table00(pk01, column1, column2) values(2, 'mno', 'today');
insert into table00(pk01, column1, column2) values(2, 'pqr', 'today');
insert into table00(pk01, column1, column2) values(1, 'stu', 'yest');
commit;
end;
/

--select * from table00;

select
   --pk00,
   pk01,
   rank() over (partition by pk01 order by pk00) as pk02,
   column1,
   column2
from table00
order by 1,2
;



      PK01       PK02 COLUM COLUM
---------- ---------- ----- -----
         1          1 abc   yest 
         1          2 def   yest 
         1          3 ghi   yest 
         1          4 stu   yest 
         2          1 jkl   today
         2          2 mno   today
         2          3 pqr   today

7 rows selected. 

########################

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67914853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档