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