解决方案 »
- 高分请教:两表相减的查询,得出库存,请问access里面怎么写
- 这样解决可不可以
- oracle如何将一个记录转换成多个记录
- 在程序中执行oracle的增删改操作成功,但是为何在物理数据库中没数据
- 两表关联查询问题,sql应该怎么写
- 一個查詢語句中的group by問題﹐如何消除查詢結果中第一個字段的冗余。
- 怎样在视图中各个类型的数据随机取一条
- 紧急求助关于ORACLE锁的问题!
- 在客户端装ORACLE9i可否访问装ORACLE8i的服务器?
- 在安装Oracle9i Application server 9.0.2.0.0时出现需要配置host文件
- ORACLE写存储过程报错
- oracle进行主备数据库切换
--又是体力活,呵呵
create or replace trigger tb1_insupd
before insert
on tb1
for each row
declare
v_cou int := 0;
v_cou1 int := 0;
v_power int := 0;
begin
select count(1) into v_cou from tb2 where 部门=:new.部门;
select count(1) into v_cou1 from tb1 where 部门=:new.部门;
if v_cou1<>0 then
select max(权重) into v_power from tb1 where 部门=:new.部门 group by 部门;
end if;
if v_cou<>0 and v_power<:new.权重 then
update tb2 set 姓名=:new.姓名 where tb2.部门=:new.部门;
elsif v_cou=0 then
insert into tb2 values(:new.部门,:new.姓名);
end if;
end;
/
--沒有錯噢,是不是你還有其他限制,給你看結果,不過我這是繁體
SQL> insert into tb1 values('部門A',35,'王五');已建立 1 個資料列.SQL> insert into tb1 values('部門C',10,'李明');已建立 1 個資料列.SQL> insert into tb1 values('部門C',20,'王強');已建立 1 個資料列.SQL> insert into tb1 values('部門D',20,'劉八');已建立 1 個資料列.SQL> commit;確認完成.SQL> select * from tb1;部門 權重 姓名
-------------------- ---------- --------------------
部門A 35 王五
部門C 10 李明
部門C 20 王強
部門D 20 劉八 SQL> select * from tb2;部門 姓名
-------------------- --------------------
部門A 王五
部門C 王強
部門D 劉八
FOR EACH ROW
DECLARE
pragma AUTONOMOUS_TRANSACTION;
BEGIN
---插入tb1中多出的部门数据,并且是qz最大的数据
INSERT INTO Tb2
SELECT Dname, NAME
FROM Tb1 a
WHERE (a.Qz, Dname) IN
(SELECT MAX(Qz), Dname FROM Tb1 GROUP BY Dname)
AND NOT EXISTS
(SELECT 1 FROM Tb2 b WHERE a.Dname = b.Dname);
COMMIT;
---更新tb1每个部门最大值对应的数据到tb2中
UPDATE Tb2 b
SET (b.Dname, b.NAME) = (SELECT a.Dname, a.NAME
FROM Tb1 a
WHERE (a.Qz, a.Dname) IN
(SELECT MAX(c.Qz), Dname
FROM Tb1 c
GROUP BY c.Dname)
AND a.Dname = b.Dname);
--子查询求得tb1每个部门最大值对应的部门,名称
COMMIT;
END;
before insert on tb1
for each row
declare
v_weight number;
v_count number;
begin
select max(权重) into v_weight from tb1 where 部门 = :new.部门;
select count(*) into v_count from tb1 where 部门 = :new.部门;
if v_count = 0 then
insert into tb2 (部门, 姓名) values (:new.部门, :new.姓名);
elsif v_weight < :new.权重 then
update tb2 set 姓名 = :new.姓名 where 部门 = :new.部门;
end if;
end;