防止更新不存在的行

Bur*_*Ali 5 sql oracle oracle11g

在工作中,我们有一个表来保存设置,其中包含以下列:

  • PARAMNAME
  • VALUE

大多数情况下会添加新设置,但在极少数情况下会删除设置.不幸的是,这意味着任何先前可能已更新此值的脚本将继续这样做,尽管更新会导致" 0 rows updated"并导致意外行为.

最近通过回归测试失败发现了这种情况,但只是在对系统中的数据为何不同进行大量调查之后.

所以我的问题是:当更新导致零行更新时,有没有办法生成错误条件?

以下是我想到的一些选项,但它们都不是真正令人满意的:

  • PL/SQL包装器,它注意到失败的更新并引发异常.
    • 不理想,因为它不会阻止任何人/脚本手动进行更新.
  • 表引发异常的触发器.
    • 违背我们目前逐步取消触发器的政策.
    • 每次删除设置时都需要更新触发器并维护过时设置列表(如果执行排除).
    • 变异表可能有问题(如果通过查询当前存在的设置进行包含).

The*_*ail 1

并不是真正的解决方案,而是一种组织事情的方法:

使用参数定义创建一个单独的表,并从参数值表链接到该表。引用所需的参数定义(不允许为空)。

定义表PARAMS (ID, NAME)

实际设置表 PARAM_VALUES (PARAM_ID, VALUE)

(改变你的表结构也是一个非常有效的方法来引发尚未更新的脚本中的错误......)