我正在为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中的第三个场景的代码(硬编码值等)时,事情似乎很好。为什么我会在运行时遇到这些问题?
非常感谢帮助。
谢谢
答案 0 :(得分:0)
在不知道触发器中有什么代码的情况下,我们诊断起来有点困难。但我会有一个去:我感觉心灵感应。
方案#1的代码是基于(alert_id, n_number)
检查唯一性。我不知道您是如何实施此检查的,但您需要为end_date is null
添加过滤器。然后,这将允许从场景#3改为涓涓到该警告。
至于您的其他问题,这表明NLS_DATE_FORMAT的客户端和数据库定义之间存在一些不一致。自从我使用Forms以来,我担心它已经过了很长时间,但我似乎记得它有自己定义这些东西的地方。如果您不知道如何查看,请查看Forms Builder文档。它应该在那里soemwhere。