我要更新一个表的数据
例:表A,里面有3个字段a1,a2,a3
现在用一个update的语句更新了a1的值,怎么可以做到自动更新a3的值,a3=a2-a1
例:表A,里面有3个字段a1,a2,a3
现在用一个update的语句更新了a1的值,怎么可以做到自动更新a3的值,a3=a2-a1
解决方案 »
- 我是个新手,请各位指教
- 求推荐两本初学oracle的图书,以浅显易懂为准。谢谢!!!
- 查询问题,如果查询两个需要汇总的表对比
- windows已在xx.exe中触发一个断点.其原因可能是堆被损坏
- 请问各位大侠 rowid 和 rownum 的区别!急~~小妹十分感谢~
- pl/sql 有无 bool-excption?a:b;这样的三元运算符?
- 如何在客户端查询服务器的IP和连接的端口? 重分相送!!!
- 如何把A表的数据,每隔一天就导出到一个文本文件里?
- 怎么将表空间sos的主人设置成用户ALPHA啊?而且ALPHA只能看到SOS表空间,怎么建立一个SID啊?
- ~~~~~~~~~~大家都进来看看。散分,谢谢!!!!!!!!!
- Oracle中用一条Sql实现多行拼接
- plsql 操作 海量数据 怎么才是效率最高的方式
-- Oracle 10g中,要用触发器实现:
create table tt(
a1 number(18,0),
a2 number(18,0),
a3 number(18,0)
);CREATE OR REPLACE TRIGGER trig_tt
BEFORE INSERT ON tt
FOR EACH ROW
BEGIN
SELECT :NEW.a2-:NEW.a1 INTO :new.a3 FROM dual;
END;
/insert into tt(a1,a2,a3)
values(1,9,14);select * from tt;
a1 number(18,0),
a2 number(18,0),
a3 number(18,0)
);CREATE OR REPLACE TRIGGER trig_tt
BEFORE INSERT OR UPDATE ON tt
FOR EACH ROW
BEGIN
SELECT :NEW.a2-:NEW.a1 INTO :new.a3 FROM dual;
END;
/insert into tt(a1,a2,a3)
values(1,9,14);select * from tt;
2 BEFORE INSERT OR UPDATE ON tt
3 FOR EACH ROW
4 BEGIN
5 SELECT :NEW.a2-:NEW.a1 INTO :new.a3 FROM dual;
6 END;
7 /触发器已创建eygle@SZTYORA>
eygle@SZTYORA> insert into tt(a1,a2,a3)
2 values(1,9,14);已创建 1 行。eygle@SZTYORA>
eygle@SZTYORA> select * from tt; A1 A2 A3
---------- ---------- ----------
1 9 8eygle@SZTYORA> update tt set a2=11;已更新 1 行。eygle@SZTYORA> commit;提交完成。eygle@SZTYORA> select * from tt; A1 A2 A3
---------- ---------- ----------
1 11 10
----写个触发器就可以了
SQL>
SQL> create or replace trigger onetable_trigger
2 before update of a1 on onetable
3 for each row
4 begin
5 :new.a3 := :new.a2 - :new.a1;
6 end
7 ;
8 /Trigger createdSQL> insert into onetable values(1,2,3);1 row insertedSQL> commit;Commit completeSQL> update onetable set a1=1;1 row updatedSQL> commit;Commit completeSQL> select * from onetable; A1 A2 A3
---------- ---------- ----------
1 2 1SQL>
既然你可以update a1那么也就可以 比如更新a1=50
update table set a1=50, a3=a2-50 where
干嘛 一定要去分隔操作