create or replace function apm_package__new (integer,varchar,varchar,varchar,timestamptz,integer,varchar,integer) returns integer as ' declare new__package_id alias for $1; -- default null new__instance_name alias for $2; -- default null new__package_key alias for $3; new__object_type alias for $4; -- default ''apm_package'' new__creation_date alias for $5; -- default now() new__creation_user alias for $6; -- default null new__creation_ip alias for $7; -- default null new__context_id alias for $8; -- default null v_singleton_p integer; v_package_type apm_package_types.package_type%TYPE; v_num_instances integer; v_package_id apm_packages.package_id%TYPE; v_instance_name apm_packages.instance_name%TYPE; begin v_singleton_p := apm_package__singleton_p( new__package_key ); v_num_instances := apm_package__num_instances( new__package_key ); if v_singleton_p = 1 and v_num_instances >= 1 then select package_id into v_package_id from apm_packages where package_key = new__package_key; return v_package_id; else v_package_id := acs_object__new( new__package_id, new__object_type, new__creation_date, new__creation_user, new__creation_ip, new__context_id ); if new__instance_name is null or new__instance_name = '''' then v_instance_name := new__package_key || '' '' || v_package_id; else v_instance_name := new__instance_name; end if; select package_type into v_package_type from apm_package_types where package_key = new__package_key; insert into apm_packages (package_id, package_key, instance_name) values (v_package_id, new__package_key, v_instance_name); update acs_objects set title = v_instance_name, package_id = v_package_id where object_id = v_package_id; if v_package_type = ''apm_application'' then insert into apm_applications (application_id) values (v_package_id); else insert into apm_services (service_id) values (v_package_id); end if; PERFORM apm_package__initialize_parameters( v_package_id, new__package_key ); return v_package_id; end if; end;' language 'plpgsql';