多用了一层begin_end。
CREATE OR REPLACE TRIGGER "TTT"."AAA" AFTER INSERT 
    ON "AAA" FOR EACH ROW
  DECLARE
  max_time AAA.DATA_TIME%TYPE;
BEGIN
    SELECT MAX(AAA) INTO max_time From AAA;
    DELETE FROM AAA WHERE DATA_TIME<=max_time-1/48;    
END;

解决方案 »

  1.   

    create procedure insert_delete
    as
    max_time AAA.DATA_TIME%TYPE;
    begin
    SELECT MAX(AAA) INTO max_time From AAA;
    DELETE FROM AAA WHERE DATA_TIME<=max_time-1/48;  
    end;
    /
    CREATE OR REPLACE TRIGGER "TTT"."AAA" AFTER INSERT 
        ON "AAA" 
        FOR EACH ROW 
    BEGIN
       insert_delete; 
    END;
    /
      

  2.   

    其实可以用语句级别实现:
    CREATE OR REPLACE TRIGGER "TTT"."AAA" 
    AFTER INSERT ON "AAA" 
    declare
    max_time AAA.DATA_TIME%TYPE;  
    begin
    SELECT MAX(AAA) INTO max_time From AAA;
    DELETE FROM AAA WHERE DATA_TIME<=max_time-1/48;
    END;
      

  3.   

    首先,AAA表上的触发器看不到AAA表,以上触发器均通不过
    可采用JOB运行存储过程的方式解决
      

  4.   

    为什么我只能是用before insert on
    换成after insert on 就不正确了?
      

  5.   

    before表示在insert以前触发
    after表示在完成insert动作以后触发事件!