2013-11-03 2 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에서 :를 제거하거나 for each row와 함께 :old./:new를 사용

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 : 문 을 무시 만들거나 userdetail 3에 삽입하기 전에 트리거 userDetailInsert에게 2. 교체 . 시작 4. userdetailsid : = Iseq.nextval; –

+0

알았어, 당신이 뭘 하려는지 확실하지 않았지만 모든'id'를 순차 값으로 덮어 쓰길 원합니까? 이 경우'for each row'와': new.'를 추가해야합니다. 위의 변경 사항보기 :) – Trinimon