【问题标题】:Oracle Forms on-button-pressed trigger to solve three scenariosOracle Forms on-button-pressed trigger 解决三种场景
【发布时间】:2010-04-30 11:00:03
【问题描述】:

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

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

n_number,
alert_id,
end_date

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

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

       2||        6||    10/25/2009

场景一:用户输入一条新记录:

alert_id 1
n_number 5
end_date NULL

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

场景二:用户输入一条新记录:

alert_id 1
n_number 10
end_date NULL

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

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

alert_id 2
n_number 6
end_date NULL

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

我已经编写了代码,似乎符合前两个场景,但阻止了我实现第三个场景。

问题:当我进入第三个场景案例时,提示我提交记录,但是当我尝试这样做时,弹出“duplicate_stop”警报,阻止我。

问题:我收到以下错误:ORA-01843: not a valid month。在 Toad 中测试第三个场景的代码(对值进行硬编码等)时,一切似乎都很好。为什么我会在运行时遇到这些问题?

非常感谢您的帮助。

谢谢

【问题讨论】:

    标签: oracle forms


    【解决方案1】:

    在不知道触发器中有什么代码的情况下,我们很难诊断。但我会试一试:我感觉到了心灵感应。

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

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

    【讨论】:

      猜你喜欢
      • 2019-10-01
      • 2023-03-30
      • 2018-07-14
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多