alter table apm_parameters add scope varchar(10) default 'instance' check (scope in ('global','instance')) not null;
begin;
select acs_attribute__create_attribute (
'apm_parameter',
'scope',
'string',
'Scope',
'Scope',
null,
null,
null,
1,
1,
null,
'type_specific',
'f'
) from dual;
end;
drop function apm__get_value (integer,integer);
drop function apm__set_value (integer,integer,varchar);
create or replace function apm__register_parameter (integer,varchar,varchar,varchar,varchar,varchar,varchar,varchar,integer,integer)
returns integer as '
declare
register_parameter__parameter_id alias for $1; -- default null
register_parameter__package_key alias for $2;
register_parameter__parameter_name alias for $3;
register_parameter__description alias for $4; -- default null
register_parameter__scope alias for $5;
register_parameter__datatype alias for $6; -- default ''string''
register_parameter__default_value alias for $7; -- default null
register_parameter__section_name alias for $8; -- default null
register_parameter__min_n_values alias for $9; -- default 1
register_parameter__max_n_values alias for $10; -- default 1
v_parameter_id apm_parameters.parameter_id%TYPE;
v_value_id apm_parameter_values.value_id%TYPE;
v_pkg record;
begin
-- Create the new parameter.
v_parameter_id := acs_object__new(
register_parameter__parameter_id,
''apm_parameter'',
now(),
null,
null,
null,
''t'',
register_parameter__package_key || '' - '' || register_parameter__parameter_name,
null
);
insert into apm_parameters
(parameter_id, parameter_name, scope, description, package_key, datatype,
default_value, section_name, min_n_values, max_n_values)
values
(v_parameter_id, register_parameter__parameter_name, register_parameter__scope,
register_parameter__description, register_parameter__package_key,
register_parameter__datatype, register_parameter__default_value,
register_parameter__section_name, register_parameter__min_n_values,
register_parameter__max_n_values);
-- Propagate parameter to new instances.
if register_parameter__scope = ''instance'' then
for v_pkg in
select package_id
from apm_packages
where package_key = register_parameter__package_key
loop
v_value_id := apm_parameter_value__new(
null,
v_pkg.package_id,
v_parameter_id,
register_parameter__default_value
);
end loop;
else
v_value_id := apm_parameter_value__new(
null,
null,
v_parameter_id,
register_parameter__default_value);
end if;
return v_parameter_id;
end;' language 'plpgsql';
-- For backwards compatibility, register a parameter with "instance" scope.
create or replace function apm__register_parameter (integer,varchar,varchar,varchar,varchar,varchar,varchar,integer,integer)
returns integer as '
declare
register_parameter__parameter_id alias for $1; -- default null
register_parameter__package_key alias for $2;
register_parameter__parameter_name alias for $3;
register_parameter__description alias for $4; -- default null
register_parameter__datatype alias for $5; -- default ''string''
register_parameter__default_value alias for $6; -- default null
register_parameter__section_name alias for $7; -- default null
register_parameter__min_n_values alias for $8; -- default 1
register_parameter__max_n_values alias for $9; -- default 1
begin
return
apm__register_parameter(register_parameter__parameter_id, register_parameter__package_key,
register_parameter__parameter_name, register_parameter__description,
''instance'', register_parameter__datatype,
register_parameter__default_value, register_parameter__section_name,
register_parameter__min_n_values, register_parameter__max_n_values);
end;' language 'plpgsql';
create or replace function apm__id_for_name (integer,varchar)
returns integer as '
declare
id_for_name__package_id alias for $1;
id_for_name__parameter_name alias for $2;
a_parameter_id apm_parameters.parameter_id%TYPE;
begin
select parameter_id into a_parameter_id
from apm_parameters
where parameter_name = id_for_name__parameter_name
and package_key = (select package_key from apm_packages
where package_id = id_for_name__package_id);
if NOT FOUND
then
raise EXCEPTION ''-20000: The specified package % AND/OR parameter % do not exist in the system'', id_for_name__package_id, id_for_name__parameter_name;
end if;
return a_parameter_id;
end;' language 'plpgsql' stable strict;
create or replace function apm__id_for_name (varchar,varchar)
returns integer as '
declare
id_for_name__package_key alias for $1;
id_for_name__parameter_name alias for $2;
a_parameter_id apm_parameters.parameter_id%TYPE;
begin
select parameter_id into a_parameter_id
from apm_parameters p
where p.parameter_name = id_for_name__parameter_name and
p.package_key = id_for_name__package_key;
if NOT FOUND
then
raise EXCEPTION ''-20000: The specified package % AND/OR parameter % do not exist in the system'', id_for_name__package_key, id_for_name__parameter_name;
end if;
return a_parameter_id;
end;' language 'plpgsql' stable strict;
create or replace function apm__get_value (integer,varchar)
returns varchar as '
declare
get_value__package_id alias for $1;
get_value__parameter_name alias for $2;
v_parameter_id apm_parameter_values.parameter_id%TYPE;
value apm_parameter_values.attr_value%TYPE;
begin
v_parameter_id := apm__id_for_name (get_value__package_id, get_value__parameter_name);
select attr_value into value from apm_parameter_values v
where v.package_id = get_value__package_id
and parameter_id = get_value__parameter_id;
return value;
end;' language 'plpgsql' stable strict;
create or replace function apm__get_value (varchar,varchar)
returns varchar as '
declare
get_value__package_key alias for $1;
get_value__parameter_name alias for $2;
v_parameter_id apm_parameter_values.parameter_id%TYPE;
value apm_parameter_values.attr_value%TYPE;
begin
v_parameter_id := apm__id_for_name (get_value__package_key, get_value__parameter_name);
select attr_value into value from apm_parameter_values v
where v.package_id = get_value__package_id
and parameter_id = get_value__parameter_id;
return value;
end;' language 'plpgsql' stable strict;
create or replace function apm__set_value (integer,varchar,varchar)
returns integer as '
declare
set_value__package_id alias for $1;
set_value__parameter_name alias for $2;
set_value__attr_value alias for $3;
v_parameter_id apm_parameter_values.parameter_id%TYPE;
v_value_id apm_parameter_values.value_id%TYPE;
begin
v_parameter_id := apm__id_for_name (set_value__package_id, set_value__parameter_name);
-- Determine if the value exists
select value_id into v_value_id from apm_parameter_values
where parameter_id = v_parameter_id
and package_id = set_value__package_id;
update apm_parameter_values set attr_value = set_value__attr_value
where value_id = v_value_id;
update acs_objects set last_modified = now()
where object_id = v_value_id;
-- exception
if NOT FOUND
then
v_value_id := apm_parameter_value__new(
null,
set_value__package_id,
v_parameter_id,
set_value__attr_value
);
end if;
return 0;
end;' language 'plpgsql';
create or replace function apm__set_value (varchar,varchar,varchar)
returns integer as '
declare
set_value__package_key alias for $1;
set_value__parameter_name alias for $2;
set_value__attr_value alias for $3;
v_parameter_id apm_parameter_values.parameter_id%TYPE;
v_value_id apm_parameter_values.value_id%TYPE;
begin
v_parameter_id := apm__id_for_name (set_value__package_key, set_value__parameter_name);
-- Determine if the value exists
select value_id into v_value_id from apm_parameter_values
where parameter_id = v_parameter_id
and package_id is null;
update apm_parameter_values set attr_value = set_value__attr_value
where value_id = v_value_id;
update acs_objects set last_modified = now()
where object_id = v_value_id;
-- exception
if NOT FOUND
then
v_value_id := apm_parameter_value__new(
null,
null,
v_parameter_id,
set_value__attr_value
);
end if;
return 0;
end;' language 'plpgsql';