Vlastné generované stĺpca Identity v Oracle

0

Otázka


Som prečítajte si dokumentáciu pre Identitu stĺpce v Oracle ako je popísané tu: https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/creating-tables-identity-column.html

V dokumentácii sa uvádza, že hodnoty, ktoré si vložené postupnosť generátor do stĺpca identity sú celé čísla. To môže byť nájdete tu https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/sequence-generator-attributes.html

Teraz, moja otázka znie: existuje spôsob, ako mať vlastné hodnoty generuje pre stĺpec identity? Iné ako celočíselné hodnoty. Povedzme, string ako "ID001', 'ID002' atď?
Vďaka vopred

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

Najlepšiu odpoveď

2

Najprv si myslia, prečo by ste mali používať reťazce ako primárny kľúč.

Vidíte nejakú výhodu? (Iné ako použitie viac úložného?)

Po druhé sa kľúč ako ID001 zvážte, čo by sa stalo, ak máte viac ako 1000 riadkov...

Jedno vysvetlenie je, že hľadáte pre niektoré užívateľ čitateľné identifikáciu riadku. To môže byť zabezpečené prostredníctvom štandardnej IDENTITY plus ďalšie virtuálne stĺpec

Príklad

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

Ďakujeme, že ste MarmiteBomber. To dáva iný dobré perspektívy. Odpoveď od @Littlefoot vysvetľuje, čo som chcel. Som sa zmeniť značku. Ospravedlňujeme sa za zmätok.
TheEqualizer
0

To je možné, ale budete musieť urobiť niečo, čo o ňom (t. j. napísať nejaký kód - spúšť). Tu je príklad.

Vzorová tabuľka; ID stĺpec by mal byť automaticky generované:

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

Table created.

Postupnosť, ktoré budú použité v spúšť:

SQL> create sequence seq_test;

Sequence created.

Spúšť je pomerne jednoduché; to zreťazí ID s poradovým číslom, ľavej-čalúnená, s nulami až 3 znakov (ako váš príklad hovorí, že áno):

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.

Testovanie:

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. Prepojenie publikované nesúvisí s "tradičným" Oracle database; skontrolovať, či je napr. VYTVORENIE TABUĽKY dokumentácia obsahuje informácie o identite stĺpce. Váš odkaz sa týka NoSQL databázy.

2021-11-24 08:02:17

To pomáha @Littlefoot. Ďakujem. Prepáčte, som nesprávne pridelené značku :)
TheEqualizer

V iných jazykoch

Táto stránka je v iných jazykoch

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