2017-05-31 65 views
0

我試圖爲表格Staff自動排序的主鍵。Oracle數據庫觸發語法

輸入:

CREATE SEQUENCE staff_idseq START WITH 1 INCREMENT BY 1 MAXVALUE 9999; 
CREATE TABLE Staff 
(
    staffid   number(4) not null primary key, 
    name   varchar2(21) not null unique, 
    permission  varchar2(10) not null 
); 
CREATE OR REPLACE TRIGGER staff_idtrig 
    BEFORE INSERT ON Staff 
    FOR EACH ROW WHEN (new.staffid is null) 
    BEGIN 
     SELECT staff_idseq.nextval INTO :new.staffid FROM dual; 
    END; 

但是當我加載此,創建序列,並表後,它要求我輸入更多命令,如果我忘了就行的末尾添加分號。也許有我查詢了一些錯誤,但我找不到什麼錯誤是我做的,因爲我無法從輸入提示脫身,而無需使用Ctrl + C。

+0

如果您是在Oracle 12.1或更高版本,你可以生成定義STAFFID'數(4)作爲identity'或設置一個序列作爲一個缺省值。 –

回答

1

觸發器是PL/SQL程序,它使用分號作爲行終止符。因此,要執行create or replace聲明,我們需要在新行上使用正斜槓來完成代碼。

試試這個:

CREATE OR REPLACE TRIGGER staff_idtrig 
    BEFORE INSERT ON Staff 
    FOR EACH ROW WHEN (new.staffid is null) 
BEGIN 
    SELECT staff_idseq.nextval INTO :new.staffid FROM dual; 
END; 
/

由於@a_horse_with_no_name說,如果你是11g上爲什麼不利用這個簡單的語法:

:new.staffid := staff_idseq.nextval; 

在幕後甲骨文仍然執行select上雙,這只是語法糖(少打字!)

+1

或者簡單:':new.staffid:= staff_idseq.nextval;' –

+0

感謝您的幫助!有效! – CDnX