2013-10-25 119 views
-2
create table account_type 
(
acct_type number(3) primary key, 
acct_desc Varchar2(30) not null CHECK (acct_desc IN('savings','salary','current','credit')), 
acct_wd_limit number(10) 
); 

create sequence acct_seq; 

CREATE OR REPLACE TRIGGER acct_pk 
BEFORE INSERT ON account_type 
FOR EACH ROW 
WHEN (new.acct_type IS NULL) 
BEGIN 
    SELECT acct_seq.NEXTVAL 
    INTO :new.acct_type 
    FROM account_type; 
END; 

我對ACCOUNT_TYPE插入之前得到就行了一個錯誤。不知道爲什麼可以解決這個問題嗎?

我也想這樣做

CREATE OR REPLACE TRIGGER acct_pk 
BEFORE INSERT ON account_type 
FOR EACH ROW 
WHEN (new.id IS NULL) 
BEGIN 
    SELECT acct_seq.NEXTVAL 
    INTO :new.id 
    FROM account_type; 
END; 

即使這樣做是給我一個錯誤

create sequence acct_pk 
start with 1 
increment by 1 
max value 999 
min value 1 
no cycle; 

感謝

+1

有什麼錯誤? – Mureinik

+0

您在創建序列中的序列名稱應爲acct_seq。 – beny23

+1

如果您不向我們展示嘗試運行您的語句所產生的錯誤消息,我們如何回答該問題?也許你的語法錯了。也許你沒有正確的權限來創建表和序列。許多不同的事情可能是錯誤的。 – Rene

回答

0

由於筆者所標記的問題與,她可以」在PL/SQL中使用sequence_name.nextVal。解決方案:

CREATE OR REPLACE TRIGGER acct_pk 
    BEFORE INSERT ON account_type 
    FOR EACH ROW 
DECLARE 
    v_acct_type NUMBER; 
BEGIN 
    IF :new.acct_type IS NULL THEN 
    SELECT acct_seq.NEXTVAL 
     INTO v_acct_type 
    FROM dual; 
    :new.acct_type := v_acct_type; 
    END IF; 
END; 
+0

嗨,感謝您的解決方案,但該聲明語句仍然給我的錯誤,如錯誤在第5行:PL/SQL:SQL語句ignored3。 FOR EACH ROW 4. DECLARE 5. v_acct_type NUMBER; 6. BEGIN 7. IF:new.acct_type IS NULL然後 –

+0

我基本上需要自動生成account_type的主鍵 –

+1

@carolinepereira編輯您的原始問題,準確地發佈您嘗試執行的內容並向我們顯示您獲得的錯誤。我在你的問題中看到,你有另外一個叫做'acct_pk'的'SEQUENCE',和你用於觸發器的名字相同。試試我的答案,但給觸發器一個不同的名稱,並更改觸發器中序列的名稱以匹配您實際使用的觸發器的名稱。 –

相關問題