2013-11-03 125 views
1
create table userdetail(
    userdetailsid number(3) not null, 
    userid varchar2(5), 
    firstname varchar2(15), 
    lastname varchar2(15), 
    email varchar2(15), 
    primary key (userdetailsid) 
); 

create sequence Iseq 
start with 1 
increment by 1; 

create or replace trigger userDetailInsert 
before insert on userdetail 
begin 
    :userdetailsid:=Iseq.nextval; 
end; 

我得到的錯誤如下:PL SQL觸發器插入值

Error at line 2: PLS-00049: bad bind variable 'USERDETAILSID' 

回答

2

:userdetailsid刪除:或組合使用:old./:newfor each row

create or replace trigger userDetailInsert 
before insert on userdetail for each row 
begin 
    :new.userdetailsid:=Iseq.nextval; 
end; 

如果您使用:,則列名稱被認爲是bind variable

一般來說,如果你想引用舊的或新的值使用:old.userdetailsid resp。 :new.userdetailsid

+0

感謝,但我仍然得到另一個錯誤,當我刪除「:」在第2行錯誤:PL/SQL:語句被忽略 1.創建或更換觸發器userDetailInsert 2.插入之前userdetail 3 。begin 4. userdetailsid:= Iseq.nextval; –

+0

好吧,不知道你試圖達到什麼目的,但我想你想用序列值覆蓋所有的'ID'?在這種情況下,你需要爲每一行添加':new.'。看到上面的變化:) – Trinimon