Oracle Forms按钮按下触发器可解决三种情况

时间:2010-01-21 06:33:37

标签: oracle forms

我正在为Oracle Forms 6i表单的保存按钮上写一个按下按钮的触发器,它必须完成几个场景。

以下是一些背景信息: 我们主要关注的领域是:

n_number,
alert_id,
end_date

对于所有三种情况,我们将候选记录与数据库中的以下记录进行比较(为了这个目的) 参数,让我们假设它们是数据库中的唯一记录 到目前为止):

alert_id|| n_number|| end_date
-------------------------------------
       1||        5||      _______

       2||        6||    10/25/2009

场景1:用户输入新记录:

alert_id 1
n_number 5
end_date NULL

目标:阻止用户提交重复行

场景2:用户输入新记录:

alert_id 1
n_number 10
end_date NULL

目标:通知用户此alert_id已存在,但如果需要,允许用户提交行。

场景3:用户输入新记录:

alert_id 2
n_number 6
end_date NULL

目标:通知用户此alert_id过去曾发生过(即它有一个非null的end_date),但如果需要,允许用户提交该行。

我编写的代码似乎符合前两种情况,但阻止我完成第三种情况。

问题:当我进入第三种情况时,系统会提示我提交记录,但是当我尝试这样做时,会弹出“duplicate_stop”警告,阻止我。

问题:我收到以下错误:ORA-01843:不是有效月份。在测试Toad中的第三个场景的代码(硬编码值等)时,事情似乎很好。为什么我会在运行时遇到这些问题?

非常感谢帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

在不知道触发器中有什么代码的情况下,我们诊断起来有点困难。但我会有一个去:我感觉心灵感应。

方案#1的代码是基于(alert_id, n_number)检查唯一性。我不知道您是如何实施此检查的,但您需要为end_date is null添加过滤器。然后,这将允许从场景#3改为涓涓到该警告。

至于您的其他问题,这表明NLS_DATE_FORMAT的客户端和数据库定义之间存在一些不一致。自从我使用Forms以来,我担心它已经过了很长时间,但我似乎记得它有自己定义这些东西的地方。如果您不知道如何查看,请查看Forms Builder文档。它应该在那里soemwhere。