Create or replace trigger realtime 
before insert on msu_t 
declare
ltime date;
msecond number(3,0);
BEGIN 
ltime:=:new.time;
mseconde:=:new.msecond;
insert into realtime_n ("time",msecond) values (ltime,msecond);
end;
-----------------------------------------------------
上面的触发器编译不过关,是因为列名里面有"time"这个关键字。所以new.time认为不合法,这个时候该怎么办呢?

解决方案 »

  1.   

    Create or replace trigger realtime
    before insert on msu_t
    declare
    ltime date;
    msecond number(3,0);
    BEGIN
    ltime:=:new.time;
    mseconde:=:new.msecond;
    insert into realtime_n  values (ltime,msecond);
    end;
    如果只有兩列,直接去掉好了。
      

  2.   

    time為何要加引號呢?
    試試After insert行不行...
      

  3.   

    用引号括起来怎么样?new."time".
    一般来说尽量不要在表和字段中用关键字,有无穷后患。
    建议改数据库字段名。
      

  4.   

    把你建表的sql发出来看下,我这里没问题啊!
      

  5.   

    insert into realtime_n ("time",msecond) 
    不用引号,或者new."time"
      

  6.   

    SQL> create table table1(time int);Table createdSQL> insert into table1 (time) values (1);1 row inserted
      

  7.   

    和insert没有关系的,把insert去掉,加上双引号,还是有问题。
    Create or replace trigger realtime 
    before insert on msu_t 
    declare
    ltime date;
    msecond number(3,0);
    BEGIN 
    ltime:=:new."time";  --加了双引号
    mseconde:=:new.msecond;
    end;
    ------------
    编译错误为:错误的赋值变量 'NEW.TIME'。另外,因为表是别人创建的,我不能随便修改别人的列名,难道真的没有其他办法了?
      

  8.   

    Create or replace trigger realtime 
    before insert on msu_t 
    declare
    ltime date;
    msecond number(3,0);
    BEGIN 
    ltime:=:new."TIME"; --用大写加双引号就可以
    --ltime:=:new."time";  加了双引号
    mseconde:=:new.msecond;
    end;
      

  9.   

    试试,  ltime:=:new."TIME"; --引用楼上的或, ltime:=:"NEW.TIME";    ,解决方式宗旨就是,必须大写,然后加引号!
      

  10.   

    仔细看看我是怎么写的
    你得for each row 哪里去了?
    //
    create table  realtime_n (time date,msecond int)
    //
    create table msu_t(time date,msecond int)
    //
    create or replace trigger realtime
    before insert on msu_t
    for each row
    declare
    ltime date;
    msecond int;
    BEGIN
    ltime:=:NEW.TIME;
    msecond:=:NEW.msecond;
    insert into realtime_n (time,msecond) values (ltime,msecond);
    end;
      

  11.   

    to hongqi162(失踪的月亮):
    我只是为了看得清楚才把“for each row ”去掉的,谢谢你的顶贴。结论,tomp() 、jiangchuanli(大山) 、hongqi162(失踪的月亮)的都可以。结帐