oracle - 如何比较 PL/SQL 过程中的日期?

标签 oracle date stored-procedures plsql

我是 SQL 编程的新手。

我需要制定一个比较日期的程序。该过程中的唯一参数是用户在 Java 程序中输入的日期。我需要检查该参数(日期)是否在一年前。换句话说,我需要将它与 SYSDATE 减去一年进行比较。如果是这种情况,我必须“清除”所有与“时间表”相关的表(其中有 2 个)。

例如,假设用户输入 2013-04-13,我的程序必须将其与 SYSDATE - 1 年进行比较(在这种情况下,它将是 2014-12-03)。由于该值小于今天减去一年,因此必须清除表“MovieSchedule”和“ChannelSchedule”。如果输入的日期是 2014-12-16,因为它现在比 SYSDATE 减去一年多,所以该过程必须发回一个明确的错误,我将能够在 Java 程序中使用该错误。

现在,正如我所说,我对 PL/SQL 过程编程完全陌生,因此,通过在互联网上查找教程,我可以得出以下结论:

CREATE OR REPLACE
PROCEDURE purge_schedule(purgeDate date) AS

DECLARE
currentDate := to_date(SYSDATE, 'YYYMMDD');

BEGIN

    -- IF purgeDate < (currentDate - 1year)
        -- delete content in "MovieSchedule" and "ChannelSchedule"
    -- ELSE
        -- return explicit error

END purge_schedule;

我什至不知道这是否是编写我想要的程序的正确方法。正如你所看到的,我的问题是如何在程序中实现我的条件,而不是其背后的逻辑。我责怪我缺乏语言练习。

请告诉我是否需要更具体,或者您是否需要更多信息才能帮助我。感谢您的帮助,祝您有美好的一天:)

最佳答案

第 1 步,定义年份。应该是显而易见的,但事实并非如此。我发现月份和年份的定义在野外存在差异。我见过一年定义为 52 周(这从来都不是实际的一年)和 365 天(每 4 年中的 3 天),偶尔也有 360 天! (30天/月*12个月)

sysdate - 365给出 365 天前的日期。

ADD_MONTHS(sysdate, -12)将给出 12 个月前的日期。在这种情况下sysdate是 2 月 29 日,结果将为上一年的 2 月 28 日。

sysdate - interval '1' year很诱人,但是interval year to month当“结果”是不存在的一天时,算术会抛出错误。

select date '2012-02-28' - interval '1' year from dual;

02/28/2011

select date '2012-02-29' - interval '1' year from dual;

ORA-01839: date not valid for month specified

关于oracle - 如何比较 PL/SQL 过程中的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34074354/

相关文章:

oracle - 如何更改 Oracle BI Publisher 中的日期格式?

oracle - 当 PL/SQL 编译失败时如何让 SQL*Plus 退出

swift - 在 Swift 中将字符串转换为日期

mysql - MySQL 日期时间格式是否适用于 SQLite 和 PostgreSQL?

javascript - 在 JS 中使用 .date() 来计算两个日期之间的差异,我做错了什么?

java - 是否可以从 hibernate 动态添加存储过程?

oracle - 如何使用低权限的 PL-SQL 获取 Oracle 中的列数据类型?

MySql 存储过程、事务和回滚

sql - 我怎样才能提高这个存储过程的性能?

c# - .NET 中的 OraOLEDB 提供程序在 CLOB 字段上是否不可靠?