oracle19c中如何设置自增复合主键?

问题描述

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

pk01 pk02 column1
==== ==== =======
1    1    abc
1    2    def
1    3    ghi
2    1    jkl
2    2    mno
3    1    pqr
1    4    stu

我是怎么做的?

解决方法

为什么不创建单列 pk00 作为 pk 并将其设置为自动增量以进行存储?即像往常一样插入 pk01 密钥(您需要拥有它)。表中没有pk02,而是在使用窗口函数表达式查询时创建它:rank() over (partition by pk01 order by pk00) as pk02。

Table00 pk00 号码 pk pk01号 第 1 列 varchar2(100) ... ...

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

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

 FirebaseStorage storage = FirebaseStorage.instance; //create storage instance

 // pass user id and image file
 Future<String> uploadImage(String id,File file) async {
    var reference =
       storage.ref().child("profileImages/$id"); //it will create folder for profileImages
    UploadTask uploadTask = reference.putFile(file);
   TaskSnapshot taskSnapshot = await uploadTask.whenComplete(() => null); //this will upload image
  String url = await taskSnapshot.ref.getDownloadURL(); // from there you will get image url.
  return url;
}

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

,

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

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;