Kolumnę użytkownika identyfikatorów w Oracle

0

Pytanie


Przeczytałem dokumentację kolumn identyfikatorów w Oracle, jak opisano tutaj: https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/creating-tables-identity-column.html

W dokumentacji jest mowa, że wartości, które mają zostać wstawione generator sekwencji w kolumnie identyfikatorów, są liczbami całkowitymi. To można znaleźć tutaj https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/sequence-generator-attributes.html

Teraz moje pytanie jest następujące: czy istnieje sposób, aby wygenerować własne wartości dla kolumny tożsamości? Oprócz wartości całkowitych. Powiedzmy, linia typu "ID001", "ID002" itp.?
Z góry wielkie dzięki

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

Najlepsza odpowiedź

2

Najpierw zastanów się, dlaczego należy użyć polecenia jako klucza podstawowego.

Czy widzisz w tym jakąś korzyść? (Z wyjątkiem użycia większej ilości pamięci?)

Po drugie, za pomocą twojego klucza, takiego jak ID001 zastanów się, co powinno się zdarzyć, jeśli masz więcej niż 1000 wierszy...

Jednym z wyjaśnień jest to, że szukasz jakąś czytelną identyfikację użytkownika polecenia. To może być zabezpieczona za pomocą standardowego dowodu plus dodatkowy wirtualny kolumna

Przykład

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

Dziękuję ci, МармитеБомбер. To daje jeszcze jedną dobrą perspektywę. Odpowiedź ta @Littlefoot, wyjaśnia, czego chciałem. Zmienię etykietę. Przepraszam za zamieszanie.
TheEqualizer
0

Jest to możliwe, ale trzeba coś z tym zrobić (tzn. napisać jakiś kod-wyzwalacz). Oto przykład.

Przykład tabeli; jej kolumna identyfikatora powinien być wygenerowany automatycznie:

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

Table created.

Sekwencja, która będzie używana w wyzwalaczu:

SQL> create sequence seq_test;

Sequence created.

Wyzwalacz jest dość prosta; łączy ID z kolejnym numerem, wzbogaconą lewej zerami do długości 3 znaków (jak określono w twoim przykładzie):

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.

Testy:

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, który umieściłeś, nie jest związana z "tradycyjnej" bazą danych Oracle; sprawdź, na przykład, w dokumentacji dotyczącej TWORZENIA TABELI, zawiera ona informacje o kolumnach identyfikatorów. Twój link jest związany z bazą danych NoSQL.

2021-11-24 08:02:17

To pomaga @Littlefoot. Dziękuję. Przepraszam, źle się przeznaczył tag :)
TheEqualizer

W innych językach

Ta strona jest w innych językach

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