求一个多线程函数 要求 对一个表的增删改要记录到另个表中 这个事物不能与主事物一起,要单独可以执行
主事物提交他不提交 谢谢高手

解决方案 »

  1.   

    可以试试触发器,可参考:
    --假设有表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;
      

  2.   

    CASE
        WHEN inserting THEN
          v_oper := 'insert...';
        WHEN updating THEN
          v_oper := 'update...';
        WHEN deleting THEN
          v_oper := 'delete...';
      END CASE;
    这段逻辑要放在一个函数里面 因为更新是非常消耗资源的 要业务逻辑判断是否更新 如果不更新就不提交事务
      

  3.   

    1.为什么子事务不准提交,不提交一会锁表,二也不能记录数据除非数据只是在主事务中会使用。方便说下业务需求么
    2.可以考虑子事务向temp表提交
    3.楼上的触发器会提交
      

  4.   


    还是不要这么用吧,oracle里面用的是多进程啊,足够满足应用了吧!