【问题标题】:Oracle trigger to increment value in another table after inserted in otherOracle触发器在插入其他表后增加另一个表中的值
【发布时间】:2021-07-15 11:55:10
【问题描述】:

如何创建触发器或过程,每次在 TABLE2 中插入某些内容时,在 TABLE1 的列 VALUE 中递增 +1?

假设我们从 VALUE.TABLE1 = 1 开始,我在 TABLE2 中插入记录。之后,我应该在 TABLE1 的 VALUE 列中看到 2。 然后其他人在 TABLE2 中插入记录,并且该过程/触发器应该再次在 VALUE 中添加 +1,现在应该是 3 等等

数据库是 Oracle 11

谢谢。

【问题讨论】:

    标签: oracle triggers sqlplus procedure


    【解决方案1】:
    CREATE TRIGGER table2_trg
    AFTER INSERT 
    ON table2
    FOR EACH ROW 
    BEGIN 
      UPDATE table1 set value = value + 1;
    END;
    

    或者

    CREATE or REPLACE TRIGGER TABLE2_trg
    FOR INSERT 
    ON TABLE2
    COMPOUND TRIGGER 
     
    cnt PLS_INTEGER := 0;
      
    AFTER EACH ROW IS 
    BEGIN 
      cnt := cnt + 1;
    END AFTER EACH ROW ;
      
    AFTER STATEMENT IS 
    BEGIN 
       UPDATE table1 SET value = value + cnt;
    END AFTER STATEMENT;
    END;
    

    我不确定它是否更好,以及当 table2 中的某些行由于插入时的异常而被删除时它将如何工作。

    如果不关心table2中的删除行,最好使用视图。

    【讨论】:

      【解决方案2】:

      不要使用tabletable1,也不要使用trigger

      改用视图

      create or replace view v_table1 as
        select count(*) + 1 as value
        from table2;
      

      【讨论】:

      • OP 似乎只计算插入;这将计算插入并减去删除,可能不会给出所需的结果。
      • 对;我将问题理解为“我想知道 table2 中现在有多少行”。也许我错了,也许不是。我们拭目以待。
      猜你喜欢
      • 2014-05-07
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      相关资源
      最近更新 更多