-- -- name/1 -- create or replace function name( text ) returns name as $$ text_name$$ language plpgsql; -- -- name/1 -- create or replace function name( character ) returns name as $$ bpchar_name$$ language plpgsql; -- -- name/1 -- create or replace function name( character varying ) returns name as $$ text_name$$ language plpgsql; -- -- name/1 -- create or replace function name( name__object_id integer ) returns varchar as $$ DECLARE object_name varchar; v_object_id integer; obj_type record; obj record; BEGIN -- Find the name function for this object, which is stored in the -- name_method column of acs_object_types. Starting with this -- object's actual type, traverse the type hierarchy upwards until -- a non-null name_method value is found. -- -- select name_method -- from acs_object_types -- start with object_type = (select object_type -- from acs_objects o -- where o.object_id = name__object_id) -- connect by object_type = prior supertype select title into object_name from acs_objects where object_id = name__object_id; if (object_name is not null) then return object_name; end if; for obj_type in select ot2.name_method from acs_object_types ot1, acs_object_types ot2 where ot1.object_type = (select object_type from acs_objects o where o.object_id = name__object_id) and ot1.tree_sortkey between ot2.tree_sortkey and tree_right(ot2.tree_sortkey) order by ot2.tree_sortkey desc loop if obj_type.name_method != '' and obj_type.name_method is NOT null then -- Execute the first name_method we find (since we're traversing -- up the type hierarchy from the object's exact type) using -- Native Dynamic SQL, to ascertain the name of this object. -- --execute 'select ' || object_type.name_method || '(:1) from dual' for obj in execute 'select ' || obj_type.name_method || '(' || name__object_id || ')::varchar as object_name' loop object_name := obj.object_name; exit; end loop; exit; end if; end loop; return object_name; END; $$ language plpgsql;