Personalizado gerado coluna de Identidade no Oracle

0

Pergunta


Eu li a documentação para colunas de Identidade no Oracle, conforme detalhado aqui: https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/creating-tables-identity-column.html

A documentação menciona que os valores que são inseridos pelo gerador de seqüência para a coluna de identidade são números inteiros. Isso pode ser encontrado aqui https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/sequence-generator-attributes.html

Agora, a minha pergunta é esta: existe uma maneira de ter costume de valores gerados para a coluna de identidade? Diferente de valores inteiros. Dizer, uma seqüência de caracteres como 'ID001', 'ID002' etc?
Muito obrigado antecipadamente

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

Melhor resposta

2

Primeiro acho que por isso você deve usar seqüências de caracteres como uma chave primária.

Você vê alguma vantagem? (Diferente usando mais de armazenamento?)

Em segundo lugar , com a sua chave, tais como ID001 considere o que deve acontecer se você tiver mais de 1000 linhas...

Uma explicação é a de que você está olhando para algum usuário legível para a identificação da linha. Este pode ser fornecido, utilizando o padrão de IDENTIDADE , acrescido de um adicional virtual coluna

Exemplo

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

Obrigado MarmiteBomber. Isso dá uma outra perspectiva. A resposta dada pelo @Littlefoot explica o que eu queria. Eu vou mudar a marca. Desculpem a confusão.
TheEqualizer
0

É possível, mas você vai ter que fazer algo sobre isso (por exemplo, escrever o código de um trigger). Aqui está um exemplo.

Tabela de exemplo; a coluna de ID deve ser auto-gerado:

SQL> create table test (id varchar2(10), name varchar2(10));

Table created.

Uma sequência, que será usado em uma trigger:

SQL> create sequence seq_test;

Sequence created.

Trigger é bastante simples; concatena ID com um número de seqüência, da esquerda preenchido com zeros até 3 caracteres de comprimento (como o exemplo diz assim):

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.

Teste:

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. o Link que você postou não está relacionado ao "tradicional" de banco de dados Oracle; verificar e.g. CRIAR TABELA documentação, contém informações sobre colunas de identidade. Seu link está relacionado para o banco de dados NoSQL.

2021-11-24 08:02:17

Isso ajuda @Littlefoot. Obrigado. Desculpe, eu erradamente atribuída a tag :)
TheEqualizer

Em outros idiomas

Esta página está em outros idiomas

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