如果你创建序列是这样写的话:create sequence "Sequence_USERS"……那么你触发器中应该这样写:
select "Sequence_USERS".nextval into :new.USERID FROM dual;因为你创建序列时,给序列的名字有小写,那么使用时也必须明确小写。

解决方案 »

  1.   

    select "Sequence_USERS".nextval into :new.USERID FROM dual;
      

  2.   

    我这样写还有错误吗?
    create sequence Sequence_USERS
    increment by 1
    start with 1
    maxvalue 9999999999
    minvalue 1
    nocycle
    nocache
    noorder
    create sequence Sequence_GROUPROLE
    increment by 1
    start with 1
    maxvalue 9999999999
    minvalue 1
    nocycle
    nocache
    noordercreate table T_GROUPROLE  (
       GROUPROLEID          NUMBER                           not null,
       GROUPROLE            VARCHAR2(50),
       ROLES                NUMBER,
       ISVALID              CHAR(1)                        default '0',
       constraint PK_T_GROUPROLE primary key (GROUPROLEID)
    )create table T_USERS  (
       USERID               NUMBER                           not null,
       USERJC               VARCHAR2(12),
       constraint PK_T_USERS primary key (USERID)
    )create trigger trig_GROUPROLE
     before insert on T_GROUPROLE
     for each row
    begin
     select Sequence_GROUPROLE.nextval into :new.GROUPROLEID FROM dual;
    end;
    create trigger trig_USERS
     before insert on T_USERS
     for each row
    begin
     select Sequence_USERS.nextval into :new.USERID FROM dual;
    end;
    这样生成了一个触发器trig_GROUPROLE,但我打开DBA来看,发现trig_GROUPROLE里面的语句包括了第二个触发器的内容,麻烦各位再给指点指点。
      

  3.   

    我是在sql*plus下生成的,而且语句到最后时SQL*PLUS出现这样的界面
    15  
    非要加一个 /才能退出。
    退出后就报“创建的触发器带有编译错误”。
      

  4.   

    在SQL*Plus下,应该每一个create sequence和create table语句最后有一个分号,然后每一个create trigger最后(end;的下一行)再加一个“/”。这样才能正确执行。