Oracle
 sql >> Base de données >  >> RDS >> Oracle

Renvoyer une 'table' (sans prédéfinir les noms de colonne) à partir d'une fonction PL/SQL

Je voudrais fortement soupçonne que vous ne voulez pas faire cela. La création dynamique de types d'objets et la construction de ce type de flexibilité dans PL/SQL est presque toujours une recette pour la ruine. Vous finirez par écrire du SQL dynamique extrêmement compliqué partout (à la fois dans les appelants et dans vos fonctions), ce qui rendra votre code beaucoup plus difficile à lire et à déboguer. Lorsque votre code devient aussi complexe, vous feriez mieux d'écrire des frameworks qui génèrent le code, mais cela vous laisse avec le problème beaucoup, beaucoup plus difficile d'écrire du code qui génère du code qui résout votre problème plutôt que de simplement écrire du code qui résout votre problème. /P>

Cela dit, si vous êtes vraiment, vraiment déterminé, il est possible de construire un fonction de table en pipeline complètement générique . Cela implique une magie profonde et profonde utilisant le framework Oracle Data Cartridge. C'est assez cool. Mais le nombre de personnes qui pourraient de manière réaliste prendre en charge et étendre ce type de code est très faible.

Avec un peu moins de magie (mais toujours bien plus que ce que je suggérerais pour pratiquement n'importe quelle organisation), vous pouvez créer un fonction de table en pipeline flexible qui repose sur le retour de types à partir d'une hiérarchie de types prédéfinie. C'est plus susceptible d'être supportable, mais cela suppose que vous pouvez créer votre hiérarchie de types à l'avance.