Personnalisé généré colonne d'Identité dans Oracle

0

La question


J'ai lu la documentation pour les colonnes d'Identité dans Oracle comme détaillé ici: https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/creating-tables-identity-column.html

La documentation mentionne que les valeurs qui s'insérés par le générateur de séquence dans la colonne d'identité sont des nombres entiers. Cela peut être trouvé ici https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/sequence-generator-attributes.html

Maintenant, ma question est la suivante: Est-il possible d'avoir des valeurs personnalisées générées par la colonne d'identité? Autres que des valeurs entières. Dire, une chaîne de caractères comme 'ID001', 'ID002", etc?
Merci beaucoup d'avance

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

La meilleure réponse

2

D'abord penser pourquoi devriez-vous utiliser les chaînes de caractères comme une clé primaire.

Voyez-vous quelque avantage? (Autres que l'utilisation de plus d'espace de stockage?)

Ensuite avec votre clé tels que ID001 envisager ce qui se passerait si vous avez plus de 1000 lignes...

Une explication est que vous êtes à la recherche pour certains lisible identification de la ligne. Ce qui peut être fournie à l'aide de la norme d'IDENTITÉ en plus d'une colonne virtuelle

Exemple

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

Merci MarmiteBomber. Cela donne un autre bon point de vue. La réponse donnée par @Minipouce explique ce que je voulais. Je vais modifier l'étiquette. Désolé pour la confusion.
TheEqualizer
0

Il est possible, mais vous aurez à faire quelque chose (c'est à dire écrire un peu de code - un déclencheur). Voici un exemple.

Exemple de table; ID de la colonne doit être auto-généré:

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

Table created.

Une séquence qui sera utilisé dans un déclencheur:

SQL> create sequence seq_test;

Sequence created.

Déclencheur est plutôt simple; il concatène ID avec un numéro de séquence, à gauche, complétée par des zéros jusqu'à 3 caractères (comme ton exemple le dit):

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. Lien que vous avez posté n'est pas lié à la "traditionnelle" de la base de données Oracle; vérifier, par exemple, de CRÉER la TABLE de la documentation, il contient des informations sur l'identité des colonnes. Votre lien est liée à des bases de données NoSQL.

2021-11-24 08:02:17

Cela permet de @Minipouce. Je vous remercie. Désolé, j'ai, à tort, attribué le tag :)
TheEqualizer

Dans d'autres langues

Cette page est dans d'autres langues

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