繁体   English   中英

唯一约束检查

[英]Unique Constraint check

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

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;

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

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

alter table ar_receipts add constraint ar_receipts_uk unique (bank_instrument_no);

这是正确的,现在可以根据要求正常工作......

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;

如果这是一个触发器,我希望WHERE BANK_INSTRUMENT_NO = :BANK_INSTRUMENT; 应该替换为WHERE BANK_INSTRUMENT_NO = :NEW.BANK_INSTRUMENT;

如果提供整个触发器会更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM