`

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

 
阅读更多

在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;

 

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics