2012-08-16 69 views
2

我有一個數據庫,我想要生成六個數字字符的唯一標記。每次在invoice_no列中插入發票號碼時,都應生成此令牌。這將意味着每次我執行插入操作並且列invoice_no不是null時,令牌都會生成數字。我希望令牌是在任何情況下都不會重複令牌的情況下生成儘可能多的令牌。由於CREATE UNIQUE TOKEN(NUMERIC)

+0

爲[dba.stackexchange.com](http://dba.stackexchange.com) – 2012-08-16 06:04:04

+0

只是一個更好的適合提出你的要求。如果您最多說明令牌可以是6個數字,並且它們必須是唯一的,那麼您將用999,999個插入符號將所有可能用完。這是你的意圖嗎? – Matt 2012-08-16 06:17:51

回答

2

您可以創建一個序列,並用它製作的標記:

CREATE SEQUENCE seq_token 
MINVALUE 0 
MAXVALUE 999999 
CYCLE 
; 

要將當前標記設置爲下一個可用值:

num_token := nextval('seq_token'); 

你的實際令牌必須是6數字長。如果您使用的令牌用零(如002354)開始的,比實際的令牌必須是一個文本,它可以產生像

text_token := lpad(num_token::text, 6, '0'); 

如果令牌必須是數字,比改變MINVALUE爲100000

(該分配是在plpgsql。您可以在觸發器或存儲的過程中使用這些。)