sql >> Databáze >  >> RDS >> Mysql

Alternativa pro dočasnou tabulku MySQL v Oracle

V Oracle velmi zřídka potřebujete dočasnou tabulku na prvním místě. Dočasné tabulky běžně potřebujete v jiných databázích, protože tyto databáze neimplementují konzistenci čtení s více verzemi a existuje možnost, že někdo, kdo bude číst data z tabulky, bude zablokován během běhu vaší procedury nebo že by vaše procedura provedla nečisté čtení, pokud by se tak stalo. Neukládejte data do samostatné struktury. V Oracle nepotřebujete globální dočasné tabulky ani z jednoho z těchto důvodů, protože čtečky neblokují zapisovače a špinavé čtení není možné.

Pokud potřebujete pouze dočasné místo pro ukládání dat při provádění výpočtů PL/SQL, kolekce PL/SQL se v Oracle běžněji používají než dočasné tabulky. Tímto způsobem nepřesouváte data tam a zpět z PL/SQL enginu do SQL enginu a zpět do PL/SQL enginu.

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;

Můžete vytvořit globální dočasnou tabulku (mimo proceduru) a použít globální dočasnou tabulku uvnitř procedury stejně, jako byste použili jakoukoli jinou tabulku. Takže můžete pokračovat v používání dočasných tabulek, pokud si to přejete. Ale mohu spočítat na jedné ruce, kolikrát jsem skutečně potřeboval dočasnou tabulku v Oracle.



  1. Jak udělit vzdálený přístup k MySQL pro celou podsíť?

  2. MySQL - Spouštěč pro aktualizaci stejné tabulky po vložení

  3. Generování dat mezi dvěma daty

  4. Jak převést čas MySQL na časové razítko UNIX pomocí PHP?