在插入序列的触发器之前

时间:2014-12-16 14:44:00

标签: oracle plsql triggers insert sequence

我必须创建一个触发器,从序列中填充主键字段user_id。

所以我先做了这个:

Create sequence user_seq;

然后我创建了触发器。我还必须创建一个函数来检查架构system_users中的表用户的emp_id中的值是否存在于架构HRM_REPO的表employees中。这部分是在评论中,因为它引起了重大问题。

create or replace trigger user_trig_bi
    Before insert on system_users.users
    for each row    
begin
            select user_seq.nextval
            into new.user_ID
            From dual;
      /*where exists (SELECT emp_id 
                    from hrm_repo.employees 
                    where hrm_repo.employees.emp_id = system_users.users.emp_id);*/
END;

我收到必须定义new.user_id的错误。 如果我运行where exists部分,我会收到system_users.users.emp_id是无效标识符的通知。

请帮助我!

此致

文尼

2 个答案:

答案 0 :(得分:2)

new替换为:new

create or replace trigger user_trig_bi
    Before insert on system_users.users
    for each row    
begin
  select user_seq.nextval
  into :new.user_ID
  From dual;
END;

或简单地说:

create or replace trigger user_trig_bi
    Before insert on system_users.users
    for each row    
begin
  :new.user_ID := user_seq.nextval;
END;

答案 1 :(得分:1)

德米特里已经得到了答案。作为补充:您永远不应该尝试使用触发器检查参照完整性,它将无法正常工作。您应该添加外键(system_users.users.emp_id)引用hrm_repo.employees(emp_id)。如果您之前错过了,请参阅http://docs.oracle.com/cd/B10500_01/server.920/a96524/c22integ.htm