2010-03-30 5 views
1

J'ai 2 procédures stockées, la première crée une table temporaire Oracle et la seconde lit à partir de celle-ci. La table temporaire a uniquement une portée pour cette session. J'appelle les procédures de .Net et la deuxième procédure ne renvoie aucun résultat. Cependant, si j'utilise les mêmes sprocs et paramètres dans SQL * Plus, cela fonctionne très bien.Lecture à partir d'une table temporaire Oracle dans une procédure distincte de celle dans laquelle elle a été affichée

J'ai essayé de créer un objet Oracle Transaction et j'espérais pouvoir lire les tables tout en utilisant la même transaction - en essayant d'émuler un type d'environnement de connexion unique de type SQL Plus.

Des idées que je fais mal ??

+1

Juste curieux de savoir pourquoi vous créez une table "temp" avec une portée de session. Pourquoi ne pas définir une table temporaire globale? – codenheim

+1

@mrjoltcola Il signifie que les données de la table temporaire ne seront disponibles que dans la même session. Toutes les tables temporaires dans Oracle sont "globales". Cependant, "global" signifie uniquement que la définition de la table est visible pour toutes les sessions. Toute donnée insérée sera visible uniquement à partir de la session qui l'a insérée. –

+0

Salut Marcel. Je ne vois pas comment vous pouvez être sûr de son intention à moins que vous n'ayez des informations qui ne sont pas affichées dans la question. Je suppose qu'il voulait dire ce qu'il a écrit, qui est "la première (procédure) crée une table temporaire d'oracle". J'ai suggéré un GTT juste au cas où il ne serait pas au courant de la fonctionnalité, donc il pourrait l'examiner. Normalement, nous ne nous référons pas à l'insertion dans un GTT comme "le créant" donc je le prends littéralement. – codenheim

Répondre

3

Il existe plusieurs façons de se connecter à Oracle à partir de .Net, mais en général, je suppose que vous créez un objet Connection et que vous l'utilisez pour générer des commandes, etc. Vous devez réutiliser cette connexion objet entre les deux appels. Cela peut signifier faire passer l'objet Connection ou utiliser un type de motif singleton pour le récupérer.

+0

Merci, je vais essayer. Je pensais que je le faisais mais je vais devoir m'assurer que je ne ferme pas la connexion entre les commandes et que je ne l'ouvre pas de nouveau. - Je suppose que cela invaliderait le passage de la connexion en premier lieu. Je reviendrais plus tard. – Bob

0

Utilisez PRESERVE ON COMMIT lors de la création de votre GLOBAL TEMPORARY TABLE, sinon la table sera effacée après chaque validation.

Questions connexes