-- Shop Address CREATE OR REPLACE FUNCTION before_insert_Shop_Address() RETURNS TRIGGER AS $$ BEGIN IF NEW.created_on IS NULL THEN NEW.created_on = CURRENT_TIMESTAMP; END IF; IF NEW.created_by IS NULL THEN NEW.created_by = CURRENT_USER; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE OR REPLACE TRIGGER tri_before_insert_Shop_Address BEFORE INSERT ON Shop_Address FOR EACH ROW EXECUTE FUNCTION before_insert_Shop_Address(); CREATE OR REPLACE FUNCTION before_update_Shop_Address() RETURNS TRIGGER AS $$ BEGIN IF OLD.id_change_set IS NOT DISTINCT FROM NEW.id_change_set THEN RAISE EXCEPTION 'New change Set ID must be provided.' USING ERRCODE = '45000'; END IF; INSERT INTO Shop_Address_Audit ( id_address, name_field, value_prev, value_new, id_change_set ) -- Changed region SELECT NEW.id_address, 'id_region', OLD.id_region, NEW.id_region, NEW.id_change_set WHERE NOT OLD.id_region <=> NEW.id_region UNION -- Changed name_full SELECT NEW.id_address, 'name_full', OLD.name_full, NEW.name_full, NEW.id_change_set WHERE NOT OLD.name_full <=> NEW.name_full UNION -- Changed phone_number SELECT NEW.id_address, 'phone_number', OLD.phone_number, NEW.phone_number, NEW.id_change_set WHERE NOT OLD.phone_number <=> NEW.phone_number UNION -- Changed postcode SELECT NEW.id_address, 'postcode', OLD.postcode, NEW.postcode, NEW.id_change_set WHERE NOT OLD.postcode <=> NEW.postcode UNION -- Changed address_line_1 SELECT NEW.id_address, 'address_line_1', OLD.address_line_1, NEW.address_line_1, NEW.id_change_set WHERE NOT OLD.address_line_1 <=> NEW.address_line_1 UNION -- Changed address_line_2 SELECT NEW.id_address, 'address_line_2', OLD.address_line_2, NEW.address_line_2, NEW.id_change_set WHERE NOT OLD.address_line_2 <=> NEW.address_line_2 UNION -- Changed city SELECT NEW.id_address, 'city', OLD.city, NEW.city, NEW.id_change_set WHERE NOT OLD.city <=> NEW.city UNION -- Changed county SELECT NEW.id_address, 'county', OLD.county, NEW.county, NEW.id_change_set WHERE NOT OLD.county <=> NEW.county UNION -- Changed active SELECT NEW.id_address, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set WHERE NOT (OLD.active <=> NEW.active) ; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE OR REPLACE TRIGGER tri_before_update_Shop_Address BEFORE UPDATE ON Shop_Address FOR EACH ROW EXECUTE FUNCTION before_update_Shop_Address();