【问题标题】:Before insert trigger for a sequence在为序列插入触发器之前
【发布时间】:2015-02-14 21:58:48
【问题描述】:

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

所以我先这样做了:

Create sequence user_seq;

然后我创建了触发器。我还必须创建函数来检查模式 system_users 中表 users 的 emp_id 中的值是否存在于模式 HRM_REPO 的表 employees 中。这部分在 cmets 中是因为它引起了重大问题。

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 是无效标识符的通知。

请帮帮我!

问候,

文尼

【问题讨论】:

    标签: oracle plsql triggers insert sequence


    【解决方案1】:

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

    【讨论】:

      【解决方案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;
      

      【讨论】:

      • 哇。我知道冒号,但是每次检查我的代码时我都错过了它。非常感谢!
      猜你喜欢
      • 1970-01-01
      • 2017-08-15
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 2018-04-17
      • 1970-01-01
      相关资源
      最近更新 更多