Oracle plsql触发器

我如何只允许用户每天只在关系表中插入一行?

CREATE OR REPLACE TRIGGER trigger_name
BEFORE INSERT ON Table_name
declare date[type?]
count int := 0;
BEGIN
if(00:00 to sysdate)
END IF
END
cj1987fdsgsg 回答:Oracle plsql触发器

为什么可以使用约束时使用触发器?

create table t (
  c1       int,ins_date date default sysdate,ins_day  date as ( trunc ( ins_date ) ),constraint one_per_day unique ( ins_day )
);

insert into t ( c1 )
  values ( 1 );

insert into t ( c1 )
  values ( 2 );

ORA-00001: unique constraint (CHRIS.ONE_PER_DAY) violated

select * from t;

C1    INS_DATE              INS_DAY                
    1 07-NOV-2019 09:31:14  07-NOV-2019 00:00:00 
,

@ChrisSaxon具有创建约束而不是尝试触发的正确想法。它不仅更清洁,而且可以工作,而触发器将不起作用(无论如何都是干净的)。任何尝试强制执行此操作的触发器都需要从同一张表中进行选择,从而导致表发生变异(ora-04091),或者需要使用:(复合触发器:(。但是我们可以进一步考虑Chris的建议,将ins_day列设为虚拟列,也如您所指出的“允许 user 每天仅将行插入关系表一次”表示您每天可以有多个条目,但不能相同的用户。将这些内容合并后,我们得出:

create table test_1per_user_day (
  t1pd_id  integer,user_id  integer,vir_1per_day  date GENERATED ALWAYS AS (trunc(ins_date)),constraint t1d_one_per_day unique (user_id,vir_1per_day )
);

-- test run individually and stlect * from test_1per_day after each 
alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
insert into test_1day(t1pd_id,user_id) values (1,1);
insert into test_1day(t1pd_id,user_id,ins_date) values (1,1,sysdate-2);
insert into test_1day(t1pd_id,ins_date,vir_1per_day) values (1,sysdate-1,sysdate);
insert into test_1day(t1pd_id,user_id) values (2,2);
insert into test_1day(t1pd_id,2);
update test_1day set vir_1per_day = sysdate; 
本文链接:https://www.f2er.com/3144858.html

大家都在问