我閱讀了 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”等字串?
提前謝謝了
uj5u.com熱心網友回復:
首先想想為什么要使用字串作為主鍵。
你看到了一些優勢嗎?(除了使用更多存盤空間?)
其次用你的鍵,比如ID001考慮如果你有超過 1000 行會發生什么......
一種解釋是您正在尋找一些用戶可讀的行標識。這可以使用標準IDENTITY加上額外的虛擬列來提供
例子
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
uj5u.com熱心網友回復:
這是可能的,但您必須對此做一些事情(即撰寫一些代碼 - 觸發器)。這是一個例子。
樣品表;它的 ID 列應該是自動生成的:
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>
PS 您發布的鏈接與“傳統”Oracle 資料庫無關;檢查例如CREATE TABLE檔案,它包含有關標識列的資訊。您的鏈接與 NoSQL 資料庫相關。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/367883.html
