6
votes

Metadata concernant les types d'enregistrement de niveau PL / SQL

Supposons que vous ayez un package PL / SQL avec un fichier enregistrement défini: xxx

existe-t-il un moyen d'obtenir une liste de champs contenus dans Test_package.person_record_type ? Par exemple, y a-t-il un tout _ * avec ces informations?

Je ne suis pas intéressé par schéma types d'enregistrement, uniquement paquet types d'enregistrement de nature.


5 commentaires

obtenir les champs de l'intérieur du même paquet?


@Tbone: Pas nécessairement. Je voudrais obtenir les champs d'un autre forfait.


"Obtenez-les", ce qui signifie que? Pouvez-vous donner un pseudo code de ce que vous essayez d'accomplir dans cet autre paquet?


Que voulez-vous faire avec ces données? Est-ce nécessaire pour aider une tâche de développeur telle que l'analyse d'impact? Ou une sorte d'exercice de programmation dynamique?


@APC: J'avais visé à générer automatiquement un code PL / SQL en fonction des champs de ce type d'enregistrement.


3 Réponses :


1
votes

Voici quelques questions similaires sur la récupération des informations du code de paquet.

Recherchez des variables globales du dictionnaire de données

Obtenez des méthodes et des paramètres de paquet de Oracle

Je vois cela comme un problème similaire comme le premier. Vous ne pouvez pas accéder à ces champs via une vue. Il y a la solution de texte Source d'analyse, qui est laide, ou vous aurez peut-être besoin d'une solution de contournement.

Quoi qu'il en soit, je pense que c'est quelque chose qui ne va pas dans votre architecture si vous en avez besoin.


1 commentaires

Cela ne serait-il pas mieux comme un commentaire qu'une réponse?



2
votes

Si PERSON_RECORD_TYPE est utilisé comme argument ou type de résultat de la procédure ou de la fonction, vous pouvez interroger tous les_arguments. Les informations sont cryptées peu de bit (la hiérarchie de l'encapsulation multiniveaux d'enregistrements et de collections est codée dans des colonnes de position, de séquence et de data_level), mais elle est présente.

Je ne pense pas que une telle question pointe sur une mauvaise architecture. Pour la génération automatique de code PLSQL, il s'agit d'une demande complètement légitime, malheureusement avec un support linguistique à PLSQL très faible.


0 commentaires

1
votes

Solution après Oracle 18C

Je pense que cela n'a pas fonctionné avant 18 ° C (corrigez-moi si je me trompe), mais maintenant, nous pouvons interroger le all_plsql_type_attrs code> Voir: p>

TYPE_NAME     TYPE_SUBNAME        ATTR_NAME   ATTR_TYPE_NAME   LENGTH
----------------------------------------------------------------------
TEST_PACKAGE  PERSON_RECORD_TYPE  FIRST_NAME  VARCHAR2         1000
TEST_PACKAGE  PERSON_RECORD_TYPE  LAST_NAME   VARCHAR2         1000


2 commentaires

All_plsql_type_attrs est en fait disponible aussi loin que 12.1.0.2


En fait, il est disponible en 12.1.0.1 selon le Changelog .