sql >> Database >  >> RDS >> Mysql

Alternatief voor een MySQL tijdelijke tabel in Oracle

In Oracle heb je in de eerste plaats zelden een tijdelijke tabel nodig. U hebt gewoonlijk tijdelijke tabellen in andere databases nodig, omdat die databases geen leesconsistentie voor meerdere versies implementeren en de kans bestaat dat iemand die gegevens uit de tabel leest, wordt geblokkeerd terwijl uw procedure wordt uitgevoerd of dat uw procedure een vuile leesbewerking zou uitvoeren als dit niet het geval was. sla de gegevens niet op in een aparte structuur. Om beide redenen heeft u geen globale tijdelijke tabellen in Oracle nodig, omdat lezers geen schrijvers blokkeren en vuil lezen niet mogelijk is.

Als u slechts een tijdelijke plaats nodig hebt om gegevens op te slaan terwijl u PL/SQL-berekeningen uitvoert, worden PL/SQL-verzamelingen vaker gebruikt dan tijdelijke tabellen in Oracle. Op deze manier pusht u geen gegevens heen en weer van de PL/SQL-engine naar de SQL-engine en terug naar de PL/SQL-engine.

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;

U kunt een globale tijdelijke tabel maken (buiten de procedure) en de globale tijdelijke tabel binnen uw procedure gebruiken, net zoals u elke andere tabel zou gebruiken. U kunt dus desgewenst tijdelijke tabellen blijven gebruiken. Maar ik kan het aantal keren dat ik echt een tijdelijke tafel in Oracle nodig had op één hand tellen.



  1. Windows Azure VM-prestaties vergelijken, deel 1

  2. SQL-fout:ORA-02291:integriteitsbeperking

  3. Wat is de huidige weergave APPL_TOP snapshots

  4. SQL Server:SELECTEER alleen de rijen met MAX(DATE)