【求助】大家帮忙看看这个触发器,在触发器中记录当前时间

ppmmwozuiai 2014-09-01 04:02:00
业务:
在插入一条数据时,将满足条件的数据转移至另一张表,并在import_time中记录系统当前时间

表1:
desc YTO_ORDERDETAIL_TABLE
名称 空值 类型
------------------------------ -------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PRODUCTNO NOT NULL VARCHAR2(800)
PARTID VARCHAR2(800)
PARTNO NOT NULL VARCHAR2(800)
SUPPLIERNO VARCHAR2(800)
ORG VARCHAR2(800)
IMPORT_TIME TIMESTAMP(6)

当执行一条insert语句之前,将表中所有PRODUCTNO与当前插入的数据PRODUCTNO相同的记录转移至另一个结构完全相同的表中,同时,在import_time位置写入系统当前时间。
以下是触发器:

create or replace trigger TRG_YTO_ORDERDETAIL_TABLE_ROW
before insert on YTO_ORDERDETAIL_TABLE
for each row
begin
:new.import_time:=current_timestamp;
insert into YTO_ORDERDETAIL_HISTORY_TABLE select * from YTO_ORDERDETAIL_TABLE where PRODUCTNO=:new.PRODUCTNO ;
delete from YTO_ORDERDETAIL_TABLE where where PRODUCTNO=:new.PRODUCTNO ;
end TRG_YTO_ORDERDETAIL_TABLE_ROW;

以下是报错信息:
错误(4,1): PL/SQL: SQL Statement ignored
错误(4,41): PL/SQL: ORA-00936: 缺失表达式

由于本人对触发器并不了解,只是现学现卖。求助该触发器该如何修改才能正常编译使用

...全文
207 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不客气,有分没
ppmmwozuiai 2014-09-01
  • 打赏
  • 举报
回复
成功了。 代码如下: create or replace trigger TRG_YTO_ORDERDETAIL_TABLE_ROW before insert on YTO_ORDERDETAIL_TABLE for each row begin :new.import_time:=current_timestamp; insert into YTO_ORDERDETAIL_HISTORY_TABLE(PRODUCTNO,PARTID,PARTNO,SUPPLIERNO,ORG,IMPORT_TIME) select PRODUCTNO,PARTID,PARTNO,SUPPLIERNO,ORG,IMPORT_TIME from YTO_ORDERDETAIL_TABLE where PRODUCTNO=:new.PRODUCTNO ; delete from YTO_ORDERDETAIL_TABLE where PRODUCTNO=:new.PRODUCTNO ; end TRG_YTO_ORDERDETAIL_TABLE_ROW; 谢谢lizzie贝儿的帮助!
  • 打赏
  • 举报
回复
引用 3 楼 ppmmwozuiai 的回复:
[quote=引用 2 楼 u010184335 的回复:] lz你的倒数第二行两个where你造吗
我不知道该怎么说我这个低级错误。 非常感谢,编译通过了。 并且触发器工作了。 但是写入系统当前时间并没有生效。[/quote] insert into YTO_ORDERDETAIL_HISTORY_TABLE select * from YTO_ORDERDETAIL_TABLE where *** 你这往历史表插入的数据是从YTO_ORDERDETAIL_TABLE这个表取的,没有用到current_timestamp 这个啊 btw,我也没怎么用过触发器哈,而且我们开发木有建触发器的权限,不能测试,猜你可以把字段展开,把这个字段单独写一下
ppmmwozuiai 2014-09-01
  • 打赏
  • 举报
回复
引用 2 楼 u010184335 的回复:
lz你的倒数第二行两个where你造吗
我不知道该怎么说我这个低级错误。 非常感谢,编译通过了。 并且触发器工作了。 但是写入系统当前时间并没有生效。
  • 打赏
  • 举报
回复
lz你的倒数第二行两个where你造吗
bw555 2014-09-01
  • 打赏
  • 举报
回复
insert into YTO_ORDERDETAIL_HISTORY_TABLE select * from YTO_ORDERDETAIL_TABLE where PRODUCTNO=:new.PRODUCTNO ; 两个表的机构不是完全一致 需要将字段都列出来
insert into tablea(c1,c2,c3,c4……)
select c1,c2,c3,c4……
from tableb
where ……

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧