审计总数.使用oracle触发器根据最新插入日期插入的记录?



我需要编写一个触发器来查找总编号。基于最近插入日期插入的记录。

在插入之后,我尝试使用语句级别())触发,但它没有给我预期的输出?
create or replace trigger trig
after insert on base_table
declare
v_cnt:=0;
begin
select count(*) into v_cnt  from base_table where ins_date= ( select max(ins_date) from base_table);
insert into audit_table values(v_cnt,sysdate);
commit;
end;

好吧,你的触发器是无效的(v_cnt没有数据类型;你不能在触发器中commit(除非它是一个自治事务)),所以我怀疑它会产生任何结果。是什么预期结果?


SQL> alter session set nls_date_format = 'dd.mm.yyyy';
Session altered.

示例表:

SQL> create table base_table (id number, ins_date date);
Table created.
SQL> create table audit_table (cnt number, datum date);
Table created.

触发:

SQL> create or replace trigger trig
2    after insert on base_table
3  declare
4    v_cnt number := 0;
5  begin
6    select count(*)
7    into v_cnt
8    from base_table
9    where ins_date = (select max(ins_date) from base_table);
10
11    insert into audit_table values (v_cnt, sysdate);
12  end;
13  /
Trigger created.

测试:

SQL> insert into base_table (id, ins_date)
2  select level, sysdate from dual connect by level <= 3;
3 rows created.
SQL> select * From base_table;
ID INS_DATE
---------- ----------
1 21.10.2021
2 21.10.2021
3 21.10.2021
SQL> select * from audit_table;
CNT DATUM
---------- ----------
3 21.10.2021
SQL>

那个看起来对我来说没问题。也许,你想用TRUNC

select max(trunc(ins_date)) from base_table

子查询中,如果ins_date包含时间分量。

最新更新