Oracle'da özel oluşturulan Kimlik sütunu

0

Soru


Oracle'daki Kimlik sütunlarının belgelerini burada ayrıntılı olarak okudum: https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/creating-tables-identity-column.html

Dokümantasyon, sıra üreteci tarafından kimlik sütununa eklenen değerlerin tamsayı olduğundan bahseder. Bu burada bulunabilir https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/sequence-generator-attributes.html

Şimdi sorum şu: Kimlik sütunu için özel değerler üretmenin bir yolu var mı? Tamsayı değerleri dışında. Diyelim ki, 'ID001', 'ID002' vb. Gibi bir dize?
Şimdiden çok teşekkürler

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

En iyi cevabı

2

Öncelikle dizeleri neden birincil anahtar olarak kullanmanız gerektiğini düşünün.

Avantaj görüyor musun? (Daha fazla depolama alanı kullanmak dışında?)

İkincisi, anahtarınızla, örneğin ID001 1000'den fazla satırınız varsa ne olması gerektiğini düşünün...

Bir açıklama, satırın kullanıcı tarafından okunabilir bir tanımını aramanızdır. Bu, standart kimlik artı ek bir sanal sütun kullanılarak sağlanabilir

Örnek

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

Teşekkürler MarmiteBomber. Bu başka bir iyi bakış açısı verir. @ Littlefoot tarafından verilen cevap ne istediğimi açıklıyor. Etiketi değiştireceğim. Karışıklık için özür dilerim.
TheEqualizer
0

Bu mümkün, ancak bu konuda bir şeyler yapmanız gerekecek (yani bazı kodlar yazınız - bir tetikleyici). İşte size bir örnek.

Örnek tablo; Kimlik sütunu otomatik olarak oluşturulmalıdır:

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

Table created.

Tetikleyicide kullanılacak bir dizi:

SQL> create sequence seq_test;

Sequence created.

Tetikleyici oldukça basittir; birleştirir ID bir sıra numarasıyla, en fazla 3 karakter uzunluğunda sıfırlarla sola yaslanmış (örneğinizin söylediği gibi):

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. Gönderdiğiniz bağlantı" geleneksel " Oracle veritabanı ile ilgili değildir; örneğin TABLO belgeleri oluştur'u kontrol edin, kimlik sütunları hakkında bilgi içerir. Bağlantınız NoSQL veritabanı ile ilgilidir.

2021-11-24 08:02:17

Bu @ Littlefoot'a yardımcı olur. Teşekkür ederim. Üzgünüm, etiketi yanlış tahsis ettim :)
TheEqualizer

Diğer dillerde

Bu sayfa diğer dillerde

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