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