sql >> Databasteknik >  >> RDS >> Mysql

Alternativ för en temporär MySQL-tabell i Oracle

I Oracle behöver du väldigt sällan ett tillfälligt bord i första hand. Du behöver vanligtvis temporära tabeller i andra databaser eftersom dessa databaser inte implementerar läskonsistens i flera versioner och det finns risk för att någon som läser data från tabellen skulle blockeras medan din procedur körs eller att din procedur skulle göra en smutsig läsning om den gjorde det. inte spara data till en separat struktur. Du behöver inte globala temporära tabeller i Oracle av någon av dessa anledningar eftersom läsare inte blockerar skribenter och smutsiga läsningar är inte möjliga.

Om du bara behöver en tillfällig plats för att lagra data medan du utför PL/SQL-beräkningar, är PL/SQL-samlingar vanligare än tillfälliga tabeller i Oracle. På så sätt skickar du inte data fram och tillbaka från PL/SQL-motorn till SQL-motorn och tillbaka till PL/SQL-motorn.

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;

Du kan skapa en global temporär tabell (utanför proceduren) och använda den globala temporära tabellen i din procedur precis som du skulle använda vilken annan tabell som helst. Så du kan fortsätta att använda tillfälliga bord om du så önskar. Men jag kan räkna på en hand hur många gånger jag verkligen behövde ett tillfälligt bord i Oracle.



  1. Bästa praxis/standard för att lagra en adress i en SQL-databas

  2. Oracle SQL Developer - Hur man återställer tappad tabell

  3. Upptäck PL/SQL-paketnivåtyper med hjälp av Oracle-ordboksvyer

  4. INSERT INTO ... RETURNING - tvetydig kolumnhänvisning