当前位置: 代码迷 >> Oracle管理 >> 简单自增触发器,执行有有关问题,帮忙看看
  详细解决方案

简单自增触发器,执行有有关问题,帮忙看看

热度:53   发布时间:2016-04-24 05:37:57.0
简单自增触发器,执行有问题,帮忙看看
CREATE TABLE authGroup
(
  authGroupID INT NOT NULL,  
  authGroupName VARCHAR2(20)
);
 ALTER TABLE authGroup ADD PRIMARY KEY (authGroupID); 

 CREATE SEQUENCE S_authGroupID INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE;
 CREATE OR REPLACE TRIGGER authGroupTrigger
  BEFORE INSERT ON authGroup FOR EACH ROW  
BEGIN  
SELECT S_authGroupID.NEXTVAL INTO :authGroup.authGroupID FROM DUAL;
END;  

建的一个自增触发器,可当:
INSERT INTO authGroup(authGroupName) VALUES('default');
时却出错:ORA-04098: trigger 'AUTHGROUPTRIGGER' is invalid and failed re-validation
大家帮忙看一下,触发器是不是错了


------解决方案--------------------
CREATE OR REPLACE TRIGGER authGroupTrigger 
BEFORE INSERT ON authGroup FOR EACH ROW
BEGIN
SELECT S_authGroupID.NEXTVAL INTO :new.authGroupID FROM DUAL; 
END;

------解决方案--------------------
SQL code
你的代码中存在中文";",修改后就可以了,参考如下:CREATE TABLE authGroup (   authGroupID  INT  NOT NULL,    authGroupName VARCHAR2(20) ); ALTER TABLE authGroup ADD PRIMARY KEY (authGroupID); CREATE SEQUENCE S_authGroupID INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE; CREATE OR REPLACE TRIGGER authGroupTrigger   BEFORE INSERT ON authGroup FOR EACH ROW  BEGIN  SELECT S_authGroupID.NEXTVAL INTO :new.authGroupID FROM DUAL;END;  /INSERT INTO authGroup(authGroupName) VALUES('default'); SELECT * FROM authgroup;输出:1    default
------解决方案--------------------
我这边ok,

SQL code
QL> CREATE TABLE authGroup  2  (  3    authGroupID  INT  NOT NULL,  4    authGroupName VARCHAR2(20)  5  );Table created.SQL> ALTER TABLE authGroup ADD PRIMARY KEY (authGroupID);Table altered.SQL> CREATE SEQUENCE S_authGroupID INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLSequence created.SQL> CREATE OR REPLACE TRIGGER authGroupTrigger  2    BEFORE INSERT ON authGroup FOR EACH ROW  3  BEGIN  4   SELECT S_authGroupID.NEXTVAL INTO :new.authGroupID FROM DUAL;  5  END;  6  /Trigger created.SQL> insert into authgroup(authGroupName) values('testing');1 row created.SQL> select * from authgroup;AUTHGROUPID AUTHGROUPNAME----------- --------------------          1 testingSQL> insert into authgroup(authGroupName) values('testing2');1 row created.SQL> select * from authgroup;AUTHGROUPID AUTHGROUPNAME----------- --------------------          1 testing          2 testing2
  相关解决方案