首页 > 解决方案 > 唯一约束检查

问题描述

我只想为检查数据是否已经存在并且它不工作的唯一约束设置触发器..请帮帮我

DECLARE
   V   NUMBER;
BEGIN
   SELECT COUNT (*)
     INTO V
     FROM AR_RECEIPTS
    WHERE BANK_INSTRUMENT_NO = :BANK_INSTRUMENT;
   IF V= 0
   THEN
      MESSAGE ('Instrument Number Already Exists!');
      MESSAGE ('Instrument Number Already Exists!');
      RAISE FORM_TRIGGER_FAILURE;
   END IF;
END;

标签: oracleplsqloracleforms

解决方案


如果您想在用户尝试插入重复的 BANK_INSTRUMENT 时显示消息,您的测试应该是IF V > 0. 目前,当目标表中不存在该仪器编号时,您会显示消息。

请注意,虽然此检查可能看起来对用户友好——在 UI 中检查并通知用户,而不是从数据库中获取异常——但它并不安全。在多用户环境中,两个用户可以输入相同的号码,全部清除并提交重复。您仍然需要在数据库中强制执行唯一约束:

alter table ar_receipts add constraint ar_receipts_uk unique (bank_instrument_no);

推荐阅读