防止AR模块客户录入重复的一个比较实用的办法

本文介绍了一个SQL触发器的设计方案,该触发器用于在插入或更新hz_parties表时防止同名客户的重复创建,特别是在处理与ap供应商可能存在同名的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在hz_parties表上增加一个触发器,因为和ap供应商可能同名,所以要额外排除一下来源应用

CREATE OR REPLACE TRIGGER hz_parties_trg
  BEFORE INSERT OR UPDATE ON hz_parties
  FOR EACH ROW
DECLARE
  n_exists NUMBER;
  exp_mul_cust EXCEPTION;
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  IF (inserting OR (updating AND nvl(:old.party_name, '-99') <>
     nvl(:new.party_name, '-99'))) AND :new.application_id <> 200 THEN
    SELECT COUNT(1)
      INTO n_exists
      FROM hz_parties hp
     WHERE 1 = 1
       AND hp.party_name = nvl(:new.party_name, '-99')
       AND EXISTS (SELECT 1
              FROM hz_cust_accounts hca
             WHERE hca.party_id = hp.party_id);
    IF n_exists > 0 THEN
      RAISE exp_mul_cust;
    END IF;
  END IF;
EXCEPTION
  WHEN exp_mul_cust THEN
    raise_application_error('-20001',
                            '名称为"' || :new.party_name ||
                            '"的客户在系统中已经存在,不能重复创建相同名称的客户!');
END;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值