CREATE OR REPLACE TRIGGER SEWRANINGTIME_TRIG
before INSERT ON SEWARNINGTIME
FOR EACH ROW
DECLARE
v_type_name sewarningtime.type_name%type;BEGIN
SELECT type_name
INTO v_type_name
FROM DICTIONARY
WHERE type_id= :new.type_id;:new.type_name:= v_type_name;
END;
before INSERT ON SEWARNINGTIME
FOR EACH ROW
DECLARE
v_type_name sewarningtime.type_name%type;BEGIN
SELECT type_name
INTO v_type_name
FROM DICTIONARY
WHERE type_id= :new.type_id;:new.type_name:= v_type_name;
END;
解决方案 »
- 也是多行数据拼接到一行,没法用存储过程。求各位帮助!
- 带数据的字段如何修改字段类型
- 9g中为什么没有PROCUI. EXE和OraSQL8. LIB
- 如何清空审计的内容?是否关闭审计就可以?
- sqlserver数据库迁移oracle一个疑难问题
- CSV文件里如果有换行怎么解决呀--高手请阅
- 每个商品三次销售记录.求助.
- 急!!!请问在9i下如何将dmp文件还原成数据库?
- 请教 “ORA-00020:maximum number of process(50) exceeded” ??
- 我怎么在SQL PLUS里运行过程,并能输出结果啊?
- 急:VB中ADO查询Oracle的问题!(在线等)
- 初学Oracle,问个简单的问题!
你的问题可以用替代视图实现
基本思路
AA表
ID NAME TYPE_NAMEBB表
ID NAME TYPE_NAME先建立一张AA表的视图
create or replace view as select * from aa;然后在aa_view上建立替代视图update_aa
create or replace trigger update_aa
instead of insert on aa_view
referencing new as n
for each row
declare
rowcnt number;
btype_name bb.type_name%type;
begin
select count(*) into rowcnt from aa where id=:n.id;
if rowcnt != 0 then
update aa set type_name=(select type_name from bb where id=:n.id)
where aa.id=:n.id;
else
select type_name into btype_name from bb where id=:n.id;
insert into aa values(:n.name,:n.id,btype_name);
end if;
end;
/这样,不要对AA表进行INSERT 操作,只要对AA_VIEW进行INSERT 操作就可以啦
我的触发器你自己可以改进一下的