我阅读了Oracle中Identity列的文档,详细信息如下:https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/creating-tables-identity-column.html文档中提到,序列生成器插入标识列的值是整数。这可以在这里找到https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/sequence-generator-attributes.html
现在,我的问题是:有没有一种方法可以为标识列生成自定义值?整数值以外。比如说,像"ID001"、"ID002"等字符串?
提前感谢
首先思考为什么要使用字符串作为主键。
你觉得有什么优势吗?(除了使用更多存储?(
其次使用ID001
等键,考虑如果您的行数超过1000,会发生什么。。。
一种解释是,您正在寻找该行的一些用户可读标识。这可以使用标准IDENTITY和一个额外的虚拟列来提供
示例
create table MY_TABLE (
ID number(19,0) generated as identity,
ID_DESC varchar2(255 char) generated always as ('ID'||ID) virtual,
col int,
primary key (ID))
;
insert into my_table(col)
select rownum from dual connect by level <= 3;
select id, id_desc from my_table order by id;
ID ID_DESC
---------- ---------
1 ID1
2 ID2
3 ID3
这是可能的,但您必须对此做点什么(即编写一些代码-一个触发器(。下面是一个例子。
样品表;其ID列应自动生成:
SQL> create table test (id varchar2(10), name varchar2(10));
Table created.
将在触发器中使用的序列:
SQL> create sequence seq_test;
Sequence created.
触发器相当简单;它将ID
与一个序列号连接在一起,左边用零填充,长度最多为3个字符(正如您的示例所说(:
SQL> create or replace trigger trg_bi_test
2 before insert on test
3 for each row
4 begin
5 :new.id := 'ID' || lpad(seq_test.nextval, 3, '0');
6 end;
7 /
Trigger created.
测试:
SQL> insert into test (name) values ('Little');
1 row created.
SQL> insert into test (name)
2 select 'Foot' from dual union all
3 select 'Equalizer' from dual;
2 rows created.
SQL> select * from test order by id;
ID NAME
---------- ----------
ID001 Little
ID002 Foot
ID003 Equalizer
SQL>
p.S.您发布的链接与";传统的";Oracle数据库;检查例如CREATE TABLE文档,它包含有关标识列的信息。您的链接与NoSQL数据库相关。