日期:2014-05-17  浏览次数:20737 次

触发器中包含关键字该怎么办?
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;