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

Alternative pour une table temporaire MySQL dans Oracle

Dans Oracle, vous avez très rarement besoin d'une table temporaire en premier lieu. Vous avez généralement besoin de tables temporaires dans d'autres bases de données car ces bases de données n'implémentent pas la cohérence de lecture multi-version et il est possible qu'une personne lisant les données de la table soit bloquée pendant l'exécution de votre procédure ou que votre procédure fasse une lecture incorrecte si elle ne l'était pas. n'enregistrez pas les données dans une structure distincte. Vous n'avez pas besoin de tables temporaires globales dans Oracle pour l'une ou l'autre de ces raisons, car les lecteurs ne bloquent pas les écrivains et les lectures incorrectes ne sont pas possibles.

Si vous avez juste besoin d'un emplacement temporaire pour stocker des données pendant que vous effectuez des calculs PL/SQL, les collections PL/SQL sont plus couramment utilisées que les tables temporaires dans Oracle. De cette façon, vous n'effectuez pas de transfert de données du moteur PL/SQL vers le moteur SQL et vers le moteur PL/SQL.

CREATE PROCEDURE do_some_processing
AS
  TYPE emp_collection_typ IS TABLE OF emp%rowtype;
  l_emps emp_collection_type;

  CURSOR emp_cur
      IS SELECT *
           FROM emp;
BEGIN
  OPEN emp_cur;
  LOOP
    FETCH emp_cur 
     BULK COLLECT INTO l_emps
    LIMIT 100;

    EXIT WHEN l_emps.count = 0;

    FOR i IN 1 .. l_emps.count
    LOOP
      <<do some complicated processing>>
    END LOOP;
  END LOOP;
END;

Vous pouvez créer une table temporaire globale (en dehors de la procédure) et utiliser la table temporaire globale à l'intérieur de votre procédure comme vous le feriez avec n'importe quelle autre table. Vous pouvez donc continuer à utiliser des tables temporaires si vous le souhaitez. Mais je peux compter sur une main le nombre de fois où j'ai vraiment eu besoin d'une table temporaire dans Oracle.