PROCEDURE show_name_components (name_in IN VARCHAR2) IS /* variables to hold components of the name */ schema VARCHAR2(100); part1 VARCHAR2(100); part2 VARCHAR2(100); dblink VARCHAR2(100); part1_type NUMBER; object_number NUMBER; /*--------------------- Local Module -----------------------*/ FUNCTION object_type (type_in IN INTEGER) RETURN VARCHAR2 /* Return name for integer type */ IS synonym_type CONSTANT INTEGER := 5; procedure_type CONSTANT INTEGER := 7; function_type CONSTANT INTEGER := 8; package_type CONSTANT INTEGER := 9; BEGIN IF type_in = synonym_type THEN RETURN 'Synonym'; ELSIF type_in = procedure_type THEN RETURN 'Procedure'; ELSIF type_in = function_type THEN RETURN 'Function'; ELSIF type_in = package_type THEN RETURN 'Package'; END IF; END; BEGIN /* Break down the name into its components */ DBMS_UTILITY.NAME_RESOLVE (name_in, 1, schema, part1, part2, dblink , part1_type, object_number); /* If the object number is NULL, name resolution failed. */ IF object_number IS NULL THEN do.pl ('Name "' || name_in || '" does not identify a valid object.'); ELSE /* Display the schema, which is always available. */ do.pl ('Schema: ' || schema); /* If there is a first part to name, have a package module */ IF part1 IS NOT NULL THEN /* Display the first part of the name */ do.pl (object_type (part1_type) || ': ' || part1); /* If there is a second part, display that. */ IF part2 IS NOT NULL THEN do.pl ('Name: ' || part2); END IF; ELSE /* No first part of name. Just display second part. */ do.pl (object_type (part1_type) || ': ' || part2); END IF; /* Display the database link if it is present. */ IF dblink IS NOT NULL THEN do.pl ('Database Link:' || dblink); END IF; END IF; END;