Пользовательский столбец идентификаторов в Oracle

0

Вопрос


Я прочитал документацию по столбцам идентификаторов в Oracle, как описано здесь: https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/creating-tables-identity-column.html

В документации упоминается, что значения, вставляемые генератором последовательностей в столбец идентификаторов, являются целыми числами. Это можно найти здесь https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/sequence-generator-attributes.html

Теперь мой вопрос заключается в следующем: есть ли способ сгенерировать пользовательские значения для столбца идентификаторов? Кроме целочисленных значений. Скажем, строка типа "ID001", "ID002" и т. Д.?
Заранее большое спасибо

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

Лучший ответ

2

Сначала подумайте, почему вы должны использовать строки в качестве первичного ключа.

Видите ли вы в этом какое-то преимущество? (Кроме использования большего объема памяти?)

Во-вторых, с помощью вашего ключа, такого как ID001 подумайте, что должно произойти, если у вас более 1000 строк...

Одно из объяснений заключается в том, что вы ищете некоторую читаемую пользователем идентификацию строки. Это может быть обеспечено с помощью стандартного удостоверения плюс дополнительный виртуальный столбец

Пример

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

Спасибо тебе, МармитеБомбер. Это дает еще одну хорошую перспективу. Ответ, данный @Littlefoot, объясняет, чего я хотел. Я изменю метку. Извините за путаницу.
TheEqualizer
0

Это возможно, но вам придется что - то с этим сделать (т. е. написать какой-то код-триггер). Вот пример.

Пример таблицы; ее столбец идентификатора должен быть сгенерирован автоматически:

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

Table created.

Последовательность, которая будет использоваться в триггере:

SQL> create sequence seq_test;

Sequence created.

Триггер довольно прост; он объединяет ID с порядковым номером, дополненным слева нулями длиной до 3 символов (как указано в вашем примере):

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.

Тестирование:

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. Ссылка, которую вы разместили, не связана с "традиционной" базой данных Oracle; проверьте, например, документацию по СОЗДАНИЮ ТАБЛИЦЫ, она содержит информацию о столбцах идентификаторов. Ваша ссылка связана с базой данных NoSQL.

2021-11-24 08:02:17

Это помогает @Littlefoot. Спасибо. Извините, я неправильно выделил тег :)
TheEqualizer

На других языках

Эта страница на других языках

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

Популярное в этой категории

Популярные вопросы в этой категории