Si PERSON_RECORD_TYPE est utilisé comme argument ou type de résultat d'une procédure ou d'une fonction, vous pouvez interroger ALL_ARGUMENTS. L'information y est peu chiffrée (la hiérarchie d'encapsulation multiniveau des enregistrements et des collections est encodée dans les colonnes POSITION, SEQUENCE et DATA_LEVEL), mais elle est présente.
Je ne pense pas qu'une telle question indique une mauvaise architecture. Pour la génération automatique de code PLSQL, il s'agit d'une demande tout à fait légitime, malheureusement avec une prise en charge très faible du langage PLSQL.