可以试试触发器,可参考: --假设有表tab,日志表为operlog CREATE OR REPLACE TRIGGER tr_tab BEFORE UPDATE OR INSERT OR DELETE ON tab FOR EACH ROW DECLARE v_oper VARCHAR2(40); BEGIN CASE WHEN inserting THEN v_oper := 'insert...'; WHEN updating THEN v_oper := 'update...'; WHEN deleting THEN v_oper := 'delete...'; END CASE; INSERT INTO operlog (oper) VALUES (v_oper); END;
CASE WHEN inserting THEN v_oper := 'insert...'; WHEN updating THEN v_oper := 'update...'; WHEN deleting THEN v_oper := 'delete...'; END CASE; 这段逻辑要放在一个函数里面 因为更新是非常消耗资源的 要业务逻辑判断是否更新 如果不更新就不提交事务
--假设有表tab,日志表为operlog
CREATE OR REPLACE TRIGGER tr_tab
BEFORE UPDATE OR INSERT OR DELETE ON tab
FOR EACH ROW
DECLARE
v_oper VARCHAR2(40);
BEGIN
CASE
WHEN inserting THEN
v_oper := 'insert...';
WHEN updating THEN
v_oper := 'update...';
WHEN deleting THEN
v_oper := 'delete...';
END CASE;
INSERT INTO operlog (oper) VALUES (v_oper);
END;
WHEN inserting THEN
v_oper := 'insert...';
WHEN updating THEN
v_oper := 'update...';
WHEN deleting THEN
v_oper := 'delete...';
END CASE;
这段逻辑要放在一个函数里面 因为更新是非常消耗资源的 要业务逻辑判断是否更新 如果不更新就不提交事务
2.可以考虑子事务向temp表提交
3.楼上的触发器会提交
还是不要这么用吧,oracle里面用的是多进程啊,足够满足应用了吧!