trigger自动更新问题

huaya1127 2009-12-16 10:39:50
有两张表 tablea和tableb
tablea 中包含 a_id,a_name,a_code 三个字段
tableb 中包含 b_id,b_name,a_id,b_code,b_acode几个字段
现在想建个触发器,在修改和添加tableb表的时候自动填入b_acode字段的内容,b_acode内容为 tablea中a_id 为tableb新添加的a_id值的 a_name和a_code值的组合:“a_name:a_code”,
例子:
tablea a_id,a_name,a_code
1 a aa
2 b bb
3 c cc
这时如果在在tableb中添加一条记录 b_id,b_name,a_id,b_code 分别为:1,b,1,bb的时候,tableb中b_acode自动填入 a:aa
请问各位高手这个trigger该怎么写??
不知道表达是否清楚了。
...全文
145 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gelyon 2009-12-29
  • 打赏
  • 举报
回复
楼主不会写?原因是什么呢?不知道是不是不懂:new和:old两个关键字。
建议楼主看下行级trigger
crazylaa 2009-12-19
  • 打赏
  • 举报
回复
create or replace trigger tr_1
before insert or update on tableb
for each row
declare
v_var varchar2(100):= '';
begin
if(:new.a_id is not null) then --插入或更新时,a_id不为空,取a_id
select a_name||':'||a_code into v_var
from tablea
where a_id=:new.a_id;
else --否则看看是不是修改,如果是修改,看看是不是存在对应原来的a_id
begin
select a_name||':'||a_code into v_var
from tablea
where a_id=:old.a_id;
exception when no_data_found then
null;
end;
end if;
:new.b_acode:=v_var;
end;
/
huaya1127 2009-12-19
  • 打赏
  • 举报
回复
多谢两个高手
ojuju10 2009-12-16
  • 打赏
  • 举报
回复
不知道你把tablea的表结构贴出来干嘛呢?

不需要建立触发器,你插入的时候,把a_name||':'||a_code合并后,插入到b_aCode字段中

如果是11g的话,支持计算列
vc555 2009-12-16
  • 打赏
  • 举报
回复
create or replace trigger tr_1
before insert on tableb
for each row
declare
v_var varchar2(100);
begin
select a_name||':'||a_code into v_var
from tablea
where a_id=:new.a_id;
:new.b_acode:=v_var;
end;
/

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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