3 Réponses :
dans Oracle, les moteurs PL / SQL et SQL maintiennent une certaine séparation. Lorsque vous exécutez une instruction SQL dans PL / SQL, il est remis au moteur SQL, qui n'a aucune connaissance des structures spécifiques à PL / SQL, telles que l'index des tables.
Ainsi, au lieu de déclarer le type dans la PL / Block SQL, vous devez créer un type de collection équivalent dans le schéma de base de données: p> puis vous pouvez l'utiliser comme dans ces deux exemples dans PL / SQL: P> basé sur votre commentaire sur ma réponse et sur la question elle-même, je pense que c'est comment je voudrais Mettre en œuvre. Utilisez un emballage afin que les enregistrements puissent être récupérés de la table réelle une fois et stockés dans un package privé global; et avoir une fonction qui renvoie un curseur de référence ouvert. p>
Merci, Dave. Une question si ... dans vos deux exemples, vous êtes en boucle à travers le tableau P et émettre la valeur de chaque ligne. Y a-t-il de toute façon pour renvoyer toutes les valeurs sans boucle? Équivalent SQL de "Select * de P"?
Il y a une variété de choses que vous pourriez faire. J'ai mis à jour ma réponse avec un exemple de fonction qui renvoie un curseur REF.
Vous aurez peut-être besoin d'une table temporaire globale.
dans Oracle Ceci est créé une fois et ensuite lorsqu'il est invoqué, les données sont privées à votre session. p>
Lien de documentation Oracle P>
Essayez quelque chose comme ça ... < / p>
C'est une très belle utilisation temporaire de la table à Oracle.
La table temporaire globale doit être créée lors de la conception de la base de données (en dehors des procédures stockées, des déclencheurs, ...), il ne peut donc pas être utilisé de manière dynamique. Mais mais cela résout des problèmes pour moi, car je n'en ai pas besoin de manière dynamique dans mon cas.
Le type de tableau SQL n'est pas requis. Pas si le type d'élément est primitif. (Varchar, numéro, date, ...)
échantillon très basique: p> Lorsque vous souhaitez le réutiliser, il pourrait être intéressant de savoir comment cela serait intéressant ressembler.
Si vous publiez plusieurs commandes que celles pourraient être regroupées dans un package.
L'astuce de la variable de paquet privé d'en haut a ses inconvénients.
Lorsque vous ajoutez des variables à un paquet, vous le donnez d'état et maintenant, il n'agit pas comme un tas de fonctions apatrides, mais comme une sorte de type étrange d'une instance d'objet singleton à la place. P> E.g. Lorsque vous recompilez le corps, il augmentera des exceptions dans des sessions qui l'utilisaient déjà auparavant. (Parce que les valeurs variables ont été invalibles) p> Cependant, vous pouvez déclarer le type dans un package (ou globalement dans SQL) et l'utiliser comme paramter dans des méthodes qui doivent l'utiliser. P> < Pré> xxx pré> Comment l'appeler: p>
Euh ... quel problème essayez-vous de résoudre ici? Pourquoi n'exécutez-vous pas simplement une sélection?
Les valeurs que j'ai stockées dans la table PIDMS seront réutilisées plusieurs fois plus tard dans mon traitement. Les valeurs elles-mêmes prennent du temps pour sortir de la base de données et je voulais donc les stocker dans un endroit intermédiaire. Je n'ai que du mal à récupérer les valeurs une fois que je les ai mis dans ...