甲骨文 6i 表单日期比较触发器



所以我试图弄清楚如何在 Oracle 6i 表单中设置一个触发器,如果它像 02.15.2018 意味着如果我设置此表单仅接受 2016 到 2017 之间的日期输入,如果用户尝试输入 2018 日期或月份,则应该弹出错误 我已经设置了日历,这是我用于日历 lov 工作的代码

DECLARE
XP NUMBER;
YP NUMBER;
BEGIN
XP:=GET_ITEM_PROPERTY('DATE_',X_POS);
YP:=GET_ITEM_PROPERTY('DATE_',Y_POS);
date_lov.get_date(sysdate,'DATE_',xp,yp,'From Date','OK','Cancel',TRUE,FALSE,FALSE);
end;    

检查此图像 表单到期

如您所见,我试图实现的就像软件到期系统一样,这样用户就可以使用 1 年,而不是他收到您的软件即将到期的消息,因此购买许可证或 30 天试用版等,到目前为止我做了什么研究我发现了这个 甲骨文软件到期

但是我的表单没有登录用户系统,所以我无法应用它,正如您在此处看到我的主表单 主窗体

这就是为什么我希望在日期入门级别实现这一点,以便如果用户尝试更改系统日期,他仍然无法输入日期,因为我希望我们的触发器不会使用 sysdate coz 通过使用 sysdate 他可以制造,如果您需要更多信息,请告诉我,并感谢您的早期 RPLY 很有帮助

我想你不想每年都重写你的代码。就像明年一样,您将需要不到 2020 年的数据,等等......首先,查看 Oracle 文档(SQL 参考)或书籍中的 EXTRACT。网上和这里都有无数的例子。

第一步是在代码中的某个位置动态设置"触发年"。您希望代码中的所有行都小于或等于我所理解的当前年份。您可以在表单或后端执行此操作 - 取决于您的要求和规则:

SELECT EXTRACT(YEAR FROM (trunc(SYSDATE))) 
INTO trigger_year
FROM dual
/

摘录将返回编号。因此,您的"trigger_year"必须是数字。上面的代码将为您提供当前年份的年份部分。所以,明年你会睡个好觉。))

接下来,在您的表单触发器中,您可以执行此操作 - 完全取决于您的要求:

  1. 以限制您的 LOV 数据,使用相同的 EXTRACT 示例对 LOV 查询进行更改。

  2. 或使用类似的代码在日历项目上写入验证触发器 - 将 EXTRACT 应用于 :block.clndr_date,两端的数据类型必须相同才能比较:

    如果 :block.clndr_date <= trigger_date则 引发错误并向用户显示消息; 如果结束;

  3. 或执行上述所有操作。

一般示例 - 将 dt1 的年份部分更改为 2019 将不返回任何行:

WITH test_data AS
(
SELECT EXTRACT(YEAR  FROM (to_date('19-APR-2018', 'DD-MON-YYYY'))) dt1
, EXTRACT(YEAR  FROM (trunc(SYSDATE))) trigger_date
FROM dual
)
SELECT dt1 FROM test_data
WHERE dt1 <= trigger_date
/

最新更新