Generat personalizat, coloană de Identitate în Oracle

0

Problema


Am citit documentația pentru coloanele de Identitate în Oracle cum este detaliat aici: https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/creating-tables-identity-column.html

Documentația menționează că valorile care obține introdus printr-o succesiune generator în coloană de identitate sunt numere întregi. Acest lucru poate fi găsit aici https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/sequence-generator-attributes.html

Acum, întrebarea mea este aceasta: există o modalitate de a avea valori personalizate generate de coloană de identitate? Altele decât valori întregi. Spun, un șir de caractere ca 'ID001', 'ID002' etc?
Multe mulțumiri în avans

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

Cel mai bun răspuns

2

În primul rând cred că ce ar trebui să utilizați siruri de caractere ca o cheie primară.

Vezi vre-un avantaj? (Altele decât folosind mai multe bagaje?)

În al doilea rând cu cheie, cum ar fi ID001 luați în considerare ceea ce ar trebui să se întâmple dacă aveți mai mult de 1000 de randuri...

O explicație este că sunteți în căutarea pentru un utilizator poate fi citit de identificare a rândului. Acest lucru poate fi furnizat cu ajutorul standard de IDENTITATE , plus o suplimentare de virtual coloana

Exemplu

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

Multumesc MarmiteBomber. Acest lucru vă oferă o altă perspectivă bună. Răspunsul dat de @Littlefoot se explică de ce mi-am dorit. Nu se va schimba tag-ul. Ne pare rău pentru confuzie.
TheEqualizer
0

Este posibil, dar va trebui să facă ceva despre el (de exemplu, scrie un cod - un trăgaci). Aici este un exemplu.

Proba de masă; ID-ul său coloană ar trebui să fie auto-generat:

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

Table created.

O secvență, care va fi folosit într-un trigger:

SQL> create sequence seq_test;

Sequence created.

De declanșare este destul de simplu; se concateneaza ID cu un număr de secvență, stânga-căptușit cu zerouri până la 3 caractere în lungime (ca exemplu spune așa):

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.

Testare:

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-ul postat de tine nu are legatura cu "tradiționale" de date Oracle; verifica de exemplu, CREAȚI TABELUL de documentare, acesta conține informații despre coloanele de identitate. Link-ul este legat la baza de date NoSQL.

2021-11-24 08:02:17

Acest lucru ajută la @Picioruș. Multumesc. Îmi pare rău, am greșit alocate tag-ul :)
TheEqualizer

În alte limbi

Această pagină este în alte limbi

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