定产生的标识列在Oracle

0

的问题


我读了文件中的标识列Oracle为详细: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'等等?
许多在此先感谢

oracle sql
2021-11-24 06:26:45
2

最好的答案

2

第一个 想为什么你应该使用的字符串作为一个 主要关键.

你看到一些优势? (比其他使用 更多的 存储?)

其次 与您的关键如 ID001 考虑什么应该发生,如果你拥有超过1000行...

一种解释是,你正在寻找一些 用户可读的鉴定 的该行。 这可以提供使用 标准的 身份 ,加上一个额外的 虚拟列

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 
2021-11-24 10:43:34

谢谢你MarmiteBomber. 这给了另一个很好的视角。 给出的答案@Littlefoot解释说什么我想要的。 我会改变的标签。 对不起混淆。
TheEqualizer
0

它是可能的,但你必须要做些什么(即编写一些代码-触发)。 这是一个例子。

样本表;其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数据库;检查,例如 创建表 的文件,它包含的信息,关于标识列。 你的链路是有关非sql数据库。

2021-11-24 08:02:17

这有助于@Littlefoot. 谢谢你。 对不起,我错误地分配的标签:)
TheEqualizer

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................