首页 > 解决方案 > Oracle中的日期时间格式

问题描述

我是 sql 新手,正在研究一个示例。在我创建的表中,我有评论表:

CREATE TABLE comments (
club       VARCHAR2(60) NOT NULL,
nick         VARCHAR2(35),
msg_date   DATE,
title        VARCHAR2(100) NOT NULL,
director   VARCHAR2(50) NOT NULL,
subject    VARCHAR2(100),
message    VARCHAR2(1500),
valoration NUMBER(2),
CONSTRAINT PK_COMMENTS PRIMARY KEY (nick,msg_date),
CONSTRAINT FK_COMMENTS_MEMBER FOREIGN KEY (nick,club) REFERENCES membership ON DELETE CASCADE,
CONSTRAINT FK_COMMENTS_MOVIES  FOREIGN KEY (title,director) REFERENCES movies,
CONSTRAINT CK_COMMENTS_VAL CHECK (valoration<11) 
);

我被要求创建一个执行以下操作的触发器:如果评论与已存储的另一个评论在同一日期到达,则将其注册为“一秒后”的日期。我遇到的问题是我不知道如何将“一秒”转换为日期。关于如何解决这个问题的任何想法?

标签: sqloraclesqlplus

解决方案


msg_date + 间隔 '1' 秒

或者 msg_date + (1/(24*60*60))

然而,这整个场景充满了危险。在触发器中检查表中的现有消息时,该表可能在其他事务中发生变化,因此这里存在竞争条件的真正风险 - 两条消息都将现有消息增加 1 秒,然后将具有相同的日期。无论检查是在触发器还是应用程序代码中,情况都是如此。

如果这是一个真实的场景,我会避免触发,使用时间戳而不是日期,其中精度介于毫秒和纳秒之间,并考虑如何处理与业务问题具有相同时间戳的消息的较低风险 - 什么是如果它确实发生的含义。


推荐阅读