conn / as sysdba 
//建表
create table userinfo (
userid number(8) primary key,
username varchar2(16) not null,
pwd varchar2(20)
);
//创建序列
create sequence userinfo_seq minvalue 1 maxvalue 999999999999999999 start with 1 increment by 1 cache 20;
//创建触发器
CREATE OR REPLACE TRIGGER "userinfo_trig"
  BEFORE INSERT ON userinfo
  REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW 
DECLARE
BEGIN
  SELECT userinfo_seq.NEXTVAL INTO :NEW.userid FROM DUAL;
END userinfo_trig;  在创建触发器时, 分号不起作用。这是为什么?

解决方案 »

  1.   

    分号不起作用的意思是?
    你先执行建表SQL,再执行建立序列SQL,最后执行建触发器的SQL有没有问题?
      

  2.   

    分号不起作用?
    什么意思,你是问触发器的代码问题还是序列使用的问题给你个例子吧,反正我平时都是用这个来用序列的首先:在oracle里创建序列 
    create sequence R_STAFF_ROLE_SEQ //序列名 
    minvalue 1 //最小值 
    maxvalue 99999999999 //最大值,一般这个足够用 
    start with 1 //开始值 
    increment by 1 //增量 
    cache 20 //缓存大小 
    order; 建表
    CREATE TABLE test (
      id number(11) primary key,
      val varchar2(16) 
    );
    其次:在oracle里编写触发器 
    CREATE OR REPLACE TRIGGER TRI_R_STAFF_ROLE 
    BEFORE INSERT ON R_STAFF_ROLE 
    FOR EACH ROW 
    BEGIN 
      SELECT R_STAFF_ROLE_SEQ.NEXTVAL 
        INTO :NEW.ID 
        FROM DUAL; 
    END ; 插入值
    insert into admin(val) VALUES ('test1');
    commit;
      

  3.   


    //创建触发器
    CREATE OR REPLACE TRIGGER "userinfo_trig"
      BEFORE INSERT ON userinfo
      REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW 
    DECLARE
    BEGIN
      SELECT userinfo_seq.NEXTVAL INTO :NEW.userid FROM DUAL;
    END userinfo_trig;--ps:你这个问题不在于分号吧,是你的创建有问题阿,看楼上的例子
      

  4.   

    to jimmylin040
    创建表和序列的时候都有创建成功的提示,创建触发器SQL> CREATE OR REPLACE sql>TRIGGER "userinfo_trig"
      2    BEFORE INSERT ON userinfo
      3    REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW 
      4  DECLARE
      5  BEGIN
      6    SELECT userinfo_seq.NEXTVAL INTO :NEW.userid FROM DUAL;
      7  END userinfo_trig;
      8  ;
      9  
     10  
     11  
    可以无限回车
      

  5.   

    to canhui87
    还是不行啊!
      到创建触发器的时候 还是可以无限回车
      

  6.   

    放错地方了,呵呵,你在sqlwindow中执行,不要放在command window中
      

  7.   

    苏苏大侠 
      能不能说具体点啊, 我才开始学编程, sql window 和 command window 还真没接触过 网上查了下 不过也找不到具体的例子!
        谢谢啦 !!!
      

  8.   

    什么情况下才是 sql window ?  什么情况下又是 command window ?   麻烦 告诉我下呗!
      

  9.   


    in sqlplus, input / at the end.
    like :
    CREATE OR REPLACE TRIGGER "userinfo_trig"
      BEFORE INSERT ON userinfo
      REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW 
    DECLARE
    BEGIN
      SELECT userinfo_seq.NEXTVAL INTO :NEW.userid FROM DUAL;
    END userinfo_trig; 
    /if you have a tool such as pl/sql developer, you can open a sql window instead of a command window.
    also you can input a '/' in command window to execute your trigger creation statement...
      

  10.   

    你要在command窗口中执行,结束符号要用'/'
    如果在sql窗口中,直接分号就可以了!
    看了你后面的描述才知道你真正的问题阿~~