ORACLE:检查时间限制

ORACLE:检查时间限制,oracle,plsql,Oracle,Plsql,我有一个开始会话和结束会话 我想通过一个约束确保结束会话在开始会话后60分钟 这是可能的,像下面这样的事情吗 ALTER TABLE BOOKING_SESSION ADD CONSTRAINT SESSION_LENGHT CHECK (END_SESSION > START_SESSION + 60 MINUTES ); 我使用以下触发器检查开始会话是否大于结束会话(感谢Justin Cave) 创建或替换触发器训练检查日期 在预订会议上插入或更新之前 每行 开始 如果(:NEW.E

我有一个开始会话和结束会话

我想通过一个约束确保结束会话在开始会话后60分钟

这是可能的,像下面这样的事情吗

ALTER TABLE BOOKING_SESSION ADD CONSTRAINT SESSION_LENGHT CHECK (END_SESSION > START_SESSION + 60 MINUTES );
我使用以下触发器检查开始会话是否大于结束会话(感谢Justin Cave)

创建或替换触发器训练检查日期
在预订会议上插入或更新之前
每行
开始
如果(:NEW.END_会话<:NEW.START_会话)
然后
引发应用程序错误(-20001,
“无效:结束_会话必须大于开始_会话=”||
to_char(:NEW.START_SESSION,'YYYY-MM-DD HH24:MI:SS');
如果结束;
结束;
/

但是,我需要一个确保结束会话在开始会话后一小时进行的会话

以下是如何使用
检查
约束来施加此类限制:

SQL> create table Tb_test(
  2    id number not null primary key,
  3    start_session timestamp,
  4    end_session   timestamp
  5  )
  6  ;

Table created

SQL> 
SQL> alter table tb_test
  2    add constraint CHK_SES_TIME
  3  check ((end_session is null) or ((end_session - start_session) >= interval '1' hour))
  4  ;

Table altered

-- data that is violate our constraint
SQL> insert into tb_test(id, start_session, end_session)
  2    values(1, systimestamp, systimestamp)
  3  ;

insert into tb_test(id, start_session, end_session)
  values(1, systimestamp, systimestamp)

ORA-02290: check constraint (HR.CHK_SES_TIME) violated

-- valid data 
SQL> insert into tb_test(id, start_session, end_session)
  2    values(1, systimestamp, systimestamp + interval '1' hour)
  3  ;

1 row inserted 

-- only start session added, end_session is null.
SQL> insert into tb_test(id, start_session)
  2    values(2, systimestamp)
  3  ;

1 row inserted

SQL> commit;

Commit complete

-- updating end_session with data that violate check constraint
SQL> update tb_test
  2    set end_session = systimestamp;

update tb_test
  set end_session = systimestamp

ORA-02290: check constraint (HR.CHK_SES_TIME) violated

-- updating end_session with valid data


SQL> update tb_test
  2    set end_session = systimestamp + interval '1' hour;

 1 row updated
在上面的示例中,
start\u session
end\u session
列是
timestamp
数据类型。如果将它们声明为
Date
数据类型,则
检查
约束的公式可能是:

(end_session - srtart_session) >= 1/24  

大卫,你已经发布了很多关于甲骨文时间戳的问题。你为什么在得到社区的答复后删除你的问题?什么?没有人回答另一个问题,你只是发表了评论。我的评论就是答案,你应该在这里发表我的评论和你的回复吗?答案如此明显,是否让你感觉不好?
(end_session - srtart_session) >= 1/24