Oracle Sql : Procédure qui permet de créer des tables temporaires à l'intérieur
Je suis nouveau sur Oracle Sql et confronté à un problème :
Je veux créer une table temporaire à l'intérieur de la procédure .
COMME:
CREATE PROCEDURE P
AS
BEGIN
CREATE TEMPORARY TABLE A(ID int);
END P;
MAIS CE QUI ME DONNE UNE ERREUR
Comment puis-je Créer une table temporaire à l'intérieur de la procédure.
J'ai vu d'autres réponses sur stackoverflow mais cela ne veut pas répondre à ma question correctement
Pouvez-vous svp m'aider ?
- Double Possible de how-to-create-and-use-temporary-table-in-oracle-stored-procedure
- Et pourquoi voulez-vous créer une table temporaire à l'intérieur d'une procédure?
- Je pense que ce que vous voulez, c'est quelque chose comme le placement d'une
CREATE GLOBAL TEMPORARY TABLE A(ID INT) ON COMMIT DELETE ROWS
en dehors de la procédure à la place. Ça va être de la session spécifique, et effacé à chaque commit. - Voir, j'ai créer quelque chose dans la procédure parce que je vais appeler une procédure à partir d'un outil et de l'outil à son tour l'accès aux données.
- Et cet outil ne jamais utiliser une session pour se connecter à la base de données? Il aura qu'à appeler la procédure une fois? Vous n'aurez jamais besoin de l'appui de deux utilisateurs?
- Cave : Hey je vais interroger la base de données qu'une seule fois par jour à partir de tibco outil , donc je pense que cela devrait fonctionner.
- Alors vous êtes tout simplement d'engager le coût de la création et de la suppression de la table tous les jours? Je ne vois pas pourquoi il ne serait pas juste de créer la table une fois, tout comme vous le feriez pour tout autre tableau dans votre système. Vous n'aurez pas de code PL/SQL qui fait référence à la table?
- ce sont les tables temporaires mais la table principale, je vais faire comme table ordinaire .
- Dans Oracle, la définition d'une table temporaire est destiné à être permanent. Seules les données de la table temporaire. Il n'est pas judicieux de créer et de supprimer la même table tous les jours si la table est temporaire ou permanent.
- Voir, je sais de quoi parlez-vous, mais pour moi, je dois aller comme si de créer des sql pour la création de ces table, alors j'ai besoin de demander à part mon équipe de production et qui va prendre beaucoup de temps ya mais je vais prendre votre suggestion vais demander à mon chef à ce sujet , vous permet de voir ce qu'il dit .
- Bien sûr, si votre procédure échoue la moitié du chemin, alors vous avez juste à gauche d'un tableau sur le système de toute façon, et la prochaine fois que l'exécution de la procédure qu'il va échouer parce que la table existe déjà. Vous feriez mieux aussi ajouter du code pour détecter si la table existe déjà, et de ne pas essayer de le créer à nouveau, s'il n'. De cette façon, si vous obtenez l'autorisation de créer la table de façon permanente, vous n'aurez pas à donner votre code à nouveau.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le SQL Dynamique avec EXÉCUTION IMMÉDIATE:
Edit: bien Évidemment vous devrez vous assurer que votre syntaxe est correcte dans l'EXÉCUTION IMMÉDIATE de la déclaration.
Espère que cela aide.
Pourquoi voulez-vous créer une table temporaire dans une procédure stockée en premier lieu?
Il est relativement commun de créer des tables temporaires dans d'autres bases de données (SQL Server et MySQL, par exemple). Il est très, très rare de faire la même chose dans Oracle. Dans presque tous les cas où vous êtes tentés de créer une table temporaire dans Oracle, il y a une meilleure approche architecturale. Il y a un thread sur le DBA pile qui traite de des solutions de rechange pour les tables temporaires et pourquoi ils ne sont généralement pas nécessaires dans Oracle.
Par programmation, vous pouvez créer des objets à l'aide de SQL dynamique
Si vous créez une table temporaire dynamiquement, cependant, chaque référence à cette table devra également être via SQL dynamique-- vous ne serez pas en mesure d'écrire de simples
SELECT
déclarations contre la table. Et la définition d'une table temporaire dans Oracle est global, il est visible à chaque session. Si vous disposez de deux séances différentes à la fois en essayant de créer la même table, la deuxième session obtiendrez une erreur. Si vous vous attendez à la table pour avoir une définition différente dans les différentes sessions, vous avez encore plus de problèmes.Vous devez déclarer votre procédure: