oracle 触发器的更新两张数据表

jake512 2011-12-05 02:23:19
我想通过插入一张表的信息时候更新另一张表,该怎么弄呢,求教,如下数据:
drop table t_info;
create table t_info(
infoid number(3) primary key,
infoname char(20),
static char(20));

drop table t_lent;
create table t_lent(
lentid number(3) primary key,
infoid number(3),
lentname char(20) not null
);

insert into t_info values(1,'洗衣机','可用');
insert into t_info values(2,'电冰箱','可用');
create trigger lenttoinfo
after insert on t_lent for
each row
begin
update t_info
set static:='已使用' where infoid = old.infoid;
end;
insert into t_lent values(1,1,'洗衣服');
请问为什么我的触发器不正确呢,怎么写才正确呢。
我想要的结果插t_lent表时候,t_info表标记已使用。
...全文
122 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jake512 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 luiseradl 的回复:]

实测修改编译通过:
SQL code

CREATE TRIGGER lenttoinfo
AFTER INSERT ON t_lent FOR EACH ROW
BEGIN
UPDATE t_info SET STATIC ='已使用' WHERE infoid = :old.infoid;
END;
[/Quote]
哈哈,是符号问题,谢谢啦,得正解!
我心飞翔 2011-12-05
  • 打赏
  • 举报
回复
实测修改编译通过:

CREATE TRIGGER lenttoinfo
AFTER INSERT ON t_lent FOR EACH ROW
BEGIN
UPDATE t_info SET STATIC ='已使用' WHERE infoid = :old.infoid;
END;
jake512 2011-12-05
  • 打赏
  • 举报
回复
现在触发器是可以建立但是插入数据时候就会跑出错误:
insert into t_lent values(1,1,'洗衣服')

ORA-04098: 触发器 'SYSTEM.LENTOTINOF' 无效且未通过重新验证

这是为什么呢?
dws2004 2011-12-05
  • 打赏
  • 举报
回复
create trigger lenttoinfo
after insert on t_lent for
each row
declare
begin
update t_info
set static='已使用' where infoid = :new.infoid;
end;
nvhaixx 2011-12-05
  • 打赏
  • 举报
回复
没弄懂你的意思。是要在插入t_lent表的时候同时更新t_info表吗?如果是,代码如下
create trigger lenttoinfo
after insert on t_lent for
each row
begin
update t_info
set static='已使用' where infoid = old.infoid;
end;

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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