Personalizzato generato colonna di Identità in Oracle

0

Domanda


Ho letto la documentazione per colonne di Identità in Oracle come in dettaglio di seguito: https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/creating-tables-identity-column.html

La documentazione menziona che i valori che vengono inseriti dal generatore di sequenza nella colonna di identità sono numeri interi. Questo può essere trovato qui https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/sequence-generator-attributes.html

Ora, la mia domanda è questa: c'È un modo per avere i valori generati per la colonna identity? Altro che valori interi. Dire, una stringa del tipo 'ID001', 'ID002' ecc?
Molte grazie in anticipo

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

Migliore risposta

2

Prima di pensare perché si dovrebbe utilizzare stringhe come chiave primaria.

Vedete qualche vantaggio? (Altro che utilizzare più di archiviazione?)

In secondo luogo con la vostra chiave come ID001 in considerazione di ciò che dovrebbe accadere se si dispone di più di 1000 righe...

Una spiegazione è che siete alla ricerca di qualche utente leggibile identificazione della riga. Questo può essere fornita utilizzando gli standard di IDENTITÀ e una ulteriore colonna virtuale

Esempio

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

Grazie MarmiteBomber. Questo dà un'altra prospettiva. La risposta data da @Littlefoot spiega quello che volevo. Voglio cambiare il tag. Mi dispiace per la confusione.
TheEqualizer
0

È possibile, ma devi fare qualcosa (cioè scrivere del codice - trigger). Ecco un esempio.

Tabella di esempio; il suo ID di colonna deve essere generato automaticamente:

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

Table created.

Una sequenza, che sarà utilizzato in un trigger:

SQL> create sequence seq_test;

Sequence created.

Trigger è piuttosto semplice; concatena ID con un numero di sequenza, da sinistra riempito con zeri fino a 3 caratteri (come il tuo esempio dice così):

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.

Test:

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. Link che hai postato non è legato alla "tradizionale" Oracle database; controllare ad esempio, CREARE la TABELLA di documentazione, esso contiene informazioni su colonne identity. Il tuo link è relativo a database NoSQL.

2021-11-24 08:02:17

Questo aiuta a @Littlefoot. Grazie. Scusate, ho erroneamente assegnato il tag :)
TheEqualizer

In altre lingue

Questa pagina è in altre lingue

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