sql >> Database teknologi >  >> RDS >> Mysql

Alternativ til en MySQL midlertidig tabel i Oracle

I Oracle har du meget sjældent brug for et midlertidigt bord i første omgang. Du har normalt brug for midlertidige tabeller i andre databaser, fordi disse databaser ikke implementerer multi-version læsekonsistens, og der er mulighed for, at nogen, der læser data fra tabellen, vil blive blokeret, mens din procedure kører, eller at din procedure ville lave en beskidt læsning, hvis den gjorde det. ikke gemme dataene til en separat struktur. Du behøver ikke globale midlertidige tabeller i Oracle af nogen af ​​disse grunde, fordi læsere ikke blokerer forfattere, og beskidte læsninger er ikke mulige.

Hvis du bare har brug for et midlertidigt sted at gemme data, mens du udfører PL/SQL-beregninger, er PL/SQL-samlinger mere almindeligt brugt end midlertidige tabeller i Oracle. På denne måde skubber du ikke data frem og tilbage fra PL/SQL-motoren til SQL-motoren og tilbage til PL/SQL-motoren.

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 oprette en global midlertidig tabel (uden for proceduren) og bruge den globale midlertidige tabel inde i din procedure, ligesom du ville bruge enhver anden tabel. Så du kan fortsætte med at bruge midlertidige borde, hvis du ønsker det. Men jeg kan tælle på én hånd det antal gange, jeg virkelig havde brug for et midlertidigt bord i Oracle.



  1. VÆLG række efter DATEPART()

  2. opdatere to tabeller på én gang

  3. opret database med pdo i php

  4. MySQL-forespørgsel - få poster baseret på nuværende dato