触发器中包含关键字该怎么办?
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认为不合法,这个时候该怎么办呢?
------解决方案--------------------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;
如果只有兩列,直接去掉好了。。。。
------解决方案--------------------time為何要加引號呢?
試試After insert行不行...
------解决方案--------------------用引号括起来怎么样?new. "time ".
一般来说尽量不要在表和字段中用关键字,有无穷后患。
建议改数据库字段名。
------解决方案--------------------把你建表的sql发出来看下,我这里没问题啊!
------解决方案--------------------把双引号去掉应该没有问题.
------解决方案--------------------insert into realtime_n ( "time ",msecond)
不用引号,或者new. "time "
------解决方案--------------------SQL> create table table1(time int);
Table created
SQL> insert into table1 (time) values (1);
1 row inserted
------解决方案--------------------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;
------解决方案--------------------试试, ltime:=:new. "TIME "; --引用楼上的
或, ltime:=: "NEW.TIME "; ,解决方式宗旨就是,必须大写,然后加引号!
------解决方案--------------------仔细看看我是怎么写的。。。
你得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;