2013-05-30 90 views
0

我想在Oracle sql中創建一個表。 我沒有創建表和我創建的序列工作正常。 現在我可以使用表格撥打姓名和電子郵件,表格將爲我創建PK。 的PK ID將是這樣的:Oracle:自定義自動增量:C0001 C0002

10001 | xxx | xxxx 
10002 | xxx | xxxx 
10003 | xxx | xxxx 

我的問題是,我該如何使用功能或觸發自動更新我的ID,使之成爲:

QWER10001 | xxx | xxxx 
QWER10002 | xxx | xxxx 
QWER10003 | xxx | xxxx 

我知道如何更新手動,但我希望它可以把我的ID前面的自定義文本,當我把信息。

可以設置文字,當數字達到最大值時無需更改文字。

我花了幾個小時尋找解決方案,但無法找到合適的解決方案,請大家幫忙!


我也做了一些調查研究網上,現在我有這樣的:

CREATE OR REPLACE TRIGGER "PROFILE_T1" 
    BEFORE INSERT OR UPDATE 
    ON "PROFILE" 
    FOR EACH ROW 
BEGIN 
    :NEW.PROFILEID := 'WCCU' sequence.PROFILEIDUSE 
END; 

但這並沒有工作。 PROFILEID是PK並自動遞增。 PROFILEIDUSE是使其自動遞增的順序。 WCCU是我想在輸入每個數據時添加到PK的文本。

+0

當前如何插入主鍵?我的猜測是,有一個'BEFORE INSERT'觸發器將其設置爲sequence.nextval。在這種情況下,簡單地將您想要的文本連接到序列值。 ' 'QWER' || sequence.nextval'。 – Noel

+0

謝謝@Noel你是對的!我現在想出瞭如何去做。創建或替換觸發器「PROFILE_T1」 之前 插入「PROFILE」 每行 開始 :new.PROFILEID:='WCCU'|| PROFILEIDUSE.nextval; 結束; –

回答

0

創建或替換觸發 「PROFILE_T1」

BEFORE

刀片上的 「PROFILE」

爲每一行

開始

:new.PROFILEID:= 'WCCU' || PROFILEIDUSE.nextval;

end;

0

由於您已經創建了sequence,您只需在INSERT語句中使用它,您應該明確指定列值。如果您不想明確指定insert語句中的值,則可以使用before inert觸發器來設置該列的值。

在INSERT語句

insert into your_table values('QWER'||your_sequence.nextval,....); 

使用觸發

CREATE OR REPLACE TRIGGER your_trigger 
    BEFORE INSERT ON your_table 
    FOR EACH ROW 
DECLARE 
BEGIN 
    :new.your_primary_key_column := 'QWER' || your_sequence.nextval; 
END your_trigger; 

現在,你可以從你insert聲明排除這種主列。觸發器會爲你添加它。