create trigger tri_test
after insert or update on a
for each row
begin
insert into b values (...);
...
end tri_test;
/
after insert or update on a
for each row
begin
insert into b values (...);
...
end tri_test;
/
解决方案 »
- 急!急!急!急!linux下安装oracle 11g(64位的),开始就报错。附有执行步骤。。
- 问下这1个语句是什么意思啊? 。。。在线等!!!!
- Oracle里某个用户Session执行锁表操作成功后,处理一半异常后(比如User挂了),表如何放开
- 系统一直重启,怀疑oracle 导致,帮忙分析下日志。谢谢!
- oracle将结果输出到时屏幕超过100000时怎么办?
- 兄弟们,Oracle救急呀!!!
- 一条比较难实现的SQL,高手帮帮忙呀!
- 取InfoMix数据库数据存入Oracle数据库中
- pl/sql不能输入全角字符,在pl/sql里,我只要一切换输入法,pl/sql就死掉了!请问什么原因。
- 求主oracle书籍
- 急!请说一下两个表左外结合查询的意思。
- 问一个数据库sql问题:在sybase中,可以采用like '[A-Z]%' 匹配以A-Z字母开头的字符串,oracle中如何写?
A 表 insert 的时候对 B 表 insert,如果 B 表有对应的 id 值时,就 update 该记录。
A 表 update 的时候对 B 表 update,但是如果 B 表没有对应的 id 值时,就插入该 update 的记录。
应该怎么写?麻烦写详细一点,给我参考一下。我真的之前没怎么用过 sql 。就知道一些 select 语句。先谢过。
after insert or update on a
for each row
declare
v_num number;
begin
if inserting then
insert into b values (:new.col1,:new.col2,...);
end if;
if updating then
select count(*) into v_num from b where b.id=:new.id;
if v_num<1 then
insert into b values (:new.col1,:new.col2,...);
else
update b set col1=:new.col1,col2=:new.col2 ... where id=:new.id;
end if;
end if;
end tri_test;
/
AFTER INSERT
ON SCCADMSEM.A表
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
param_alert_category_id VARCHAR2(50):='new_notice_publish';
param_num INTEGER:=0;
err_num NUMBER;
err_msg VARCHAR2(100);
shouldDisply_All VARCHAR2(1);
param_description VARCHAR2(20):='新通告发布: '; BEGIN
SELECT COUNT(*) INTO param_num FROM A表名 A WHERE :NEW.NOTICE_PUBLISH_ID = A.NOTICE_PUBLISH_ID;
IF param_num > 0 THEN
shouldDisply_All := 'Y';
END IF;
INSERT INTO B表名(issue_id,issue_category_id,supplier_id,customer_id,create_date_time,reference_value_1,reference_value_2,last_modified_date_time,case_ended,description)
VALUES(issue_seq.NEXTVAL,param_alert_category_id,:NEW.PUBLISH_PARTY_ID,:NEW.PUBLISH_PARTY_ID,SYSDATE,TO_CHAR(:NEW.NOTICE_PUBLISH_ID),shouldDisply_All,SYSDATE,0, '->'||:NEW.PUBLISH_PARTY_ID ||':'||TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss')||param_description||TO_CHAR(:NEW.NOTICE_TOPIC));
END;
以上是个很简单的例子
after insert or update on a
for each row
declare
v_num number;
begin
if inserting then
insert into b@tst1 (name, id, time, data1, data2) values (:new.name,:new.id,:new.time,:new.data1,:new.data2);
end if;
if updating then
select count(*) into v_num from b where b.id=:new.id;
if v_num<1 then
insert into b@tst1 (name, id, time, data1, data2) values (:new.name,:new.id,:new.time,:new.data1,:new.data2);
else
update b@tst1 set time=:new.time,data1=:new.data1,data2=:new.data2 where id=:new.id;
end if;
end if;
end tri_test;
select count(*) into v_num from b@tst1 where id=:new.id; 了。
总是出现,00942 错误。
insert into b@tst1 (name, id, time, data1, data2) values ('x5',9,'20040102',89,99); select count(*) from b@tst1 where id=2;update b@tst1 set time='20040102',data1=89,data2=99 where id=2;
看是不是在存储过程里面不能访问b@tst1表?
create trigger tri_test
after insert or update on a
for each row begin insert into b@tst1 (name, id, time, data1, data2) values (:new.name,:new.id,:new.time,:new.data1,:new.data2); end tri_test;
就比较奇怪了
用同样的用户登陆sql*plus执行这条语句可以访问b@tst1表?
再一个问题,现在,我想通过 sql
insert into b@tst1 (name, id, time, data1, data2) select name, id, time, data1, data2 from a
把a表的所有数据都事先导入 b@tst1 表中,但是 b@tst1 表已存在 id 的记录就不覆盖了,sql该怎么写?上面的 sql 在 insert 的时候,因为 id 是 key 值,所以出错。
的话,可以尝试把id改一下。
方法二:改变b表的主健。
方法三:用“序列”但是这样你的a表的id还是要变得。
由于不太清楚你的数据是怎么样的情况,所以只能说这些了,不对之处请大家指正。
where not exists(select 1 from b@tst1 t where t.id=a.id);
主键不能动,因为另一个程序在读写a表,a,b表的数据很多,上万条,我觉得通过写 insert update 的 sql 导入初始数据最安全方便了。你觉得呢?to bzszp(SongZip) ,
insert 的 sql 可以了。
那如果,把a表的所有数据都导入 b@tst1 表时,对于 b@tst1 表已存在 id 的记录,如果 a.time>b.time就用 update sql 更新。这个 update 的 sql 又该怎么写?在这里先感谢帮忙了,不管怎样,明天给分。祝大侠,高高手国庆快乐。