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

Oracle Sql :Procédure qui peut créer des tables temporaires à l'intérieur

Pourquoi voulez-vous créer une table temporaire dans une procédure stockée en premier lieu ?

Il est relativement courant 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é de créer une table temporaire dans Oracle, il existe une meilleure approche architecturale. Il y a un fil de discussion sur la pile DBA qui traite de alternatives aux tables temporaires et pourquoi ils ne sont pas couramment nécessaires dans Oracle.

Par programmation, vous pouvez créer des objets à l'aide de SQL dynamique

CREATE OR REPLACE PROCEDURE dont_do_this
AS
BEGIN
  EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE a( id INTEGER )';
END;

Si vous créez une table temporaire dynamiquement, cependant, chaque référence à cette table devra également être via SQL dynamique-- vous ne pourrez pas écrire de simples SELECT déclarations contre la table. Et la définition d'une table temporaire dans Oracle est globale, elle est donc visible à chaque session. Si vous avez deux sessions différentes essayant de créer la même table, la deuxième session obtiendra une erreur. Si vous vous attendez à ce que la table ait une définition différente dans différentes sessions, vous avez encore plus de problèmes.