首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORACLE11g自动增量

ORACLE11g自动增量
EN

Stack Overflow用户
提问于 2019-06-08 18:02:15
回答 5查看 79关注 0票数 0

错误代码4098,SQL状态42000: ORA-04098:触发器'HR.TRGM_ID‘无效,重新验证失败。

我要解决这个问题了。我该怎么办?

代码语言:javascript
复制
create table kids(
       id integer primary key, 
       mbrand varchar(100) , 
       mmodel varchar(100), 
       mprice integer,
       mquantity integer,
       mdescription varchar(100),
       mphoto varchar(100)
);

CREATE SEQUENCE  id_seq;

create trigger trgk_id
      before insert on kids
      for each row
    begin
      select id_seq.nextval
        into :new.id
        from dual;
EN

回答 5

Stack Overflow用户

发布于 2019-06-08 18:52:22

看来你不应该做任何事。一切正常,就您发布的代码而言(除了END缺失这一事实外)。

另一方面,Oracle抱怨名为TRGM_ID的触发器,而我们拥有的代码名为TRGK_ID的触发器。我们说的是同一个扳机吗?

代码语言:javascript
复制
SQL> create table kids(
  2         id integer primary key,
  3         mbrand varchar(100) ,
  4         mmodel varchar(100),
  5         mprice integer,
  6         mquantity integer,
  7         mdescription varchar(100),
  8         mphoto varchar(100)
  9  );

Table created.

SQL> CREATE SEQUENCE  id_seq;

Sequence created.

SQL> create trigger trgk_id
  2    before insert on kids
  3    for each row
  4  begin
  5    select id_seq.nextval
  6      into :new.id
  7      from dual;
  8  end;
  9  /

Trigger created.

SQL> insert into kids (mbrand) values ('Nike');

1 row created.

SQL> select id, mbrand from kids;

        ID MBRAND
---------- ----------
         1 Nike

SQL>
票数 2
EN

Stack Overflow用户

发布于 2019-06-08 21:13:58

问题很简单,您的触发器丢失了其END语句。将触发器重写为

代码语言:javascript
复制
create OR REPLACE trigger trgk_id
      before insert on kids
      for each row
    begin
      select id_seq.nextval
        into :new.id
        from dual;
END TRGK_ID;  -- added

你应该表现得很好。

这里的小提琴

票数 2
EN

Stack Overflow用户

发布于 2019-06-09 08:10:26

对于Oracle11g,不需要在SQL查询语句中使用currvalnextval伪usable,而需要在PL/SQL表达式中使用。

因此,避免使用:

代码语言:javascript
复制
  select id_seq.nextval
    into :new.id
    from dual;

直接使用

:new.id := id_seq.nextval;

而不是。

当然,在完全填充了在触发器末尾添加end子句这一主要问题之后,请执行上述操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56508919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档