sql >> Databasteknik >  >> RDS >> Oracle

Oracle PL/SQL Skapa tabeller i markören?

Vanligtvis utför du inte DDL (skapa, ändra, släpp) i din PL/SQL-procedur. Om du behöver en tabell för att lagra vissa tillfälliga data kan du skapa tillfälliga tabeller för det här syftet. I ditt fall skulle jag först skapa tabellerna

CREATE GLOBAL TEMPORARY TABLE T1
  (
    col1 VARCHAR2(128),
    col2  VARCHAR2(128),
    col3 NUMBER(3) NOT NULL,
    col3 FLOAT(100)
  );

CREATE GLOBAL TEMPORARY TABLE T2 AS
SELECT * FROM other_table WHERE 1 = 0;

Och då skulle proceduren se ut så här

DECLARE
CURSOR CUR IS ...
BEGIN
       FOR rec IN CUR
       LOOP
       --Do stuff here
         END LOOP;

DELETE FROM T1;
DELETE FROM T2;
END;
/

Naturligtvis skulle tabellerna inte släppas efter det, men jag antar att du vill använda din PL/SQL-procedur regelbundet, inte bara en gång, eller hur?

Om du fortfarande vill utföra DDL i din procedur måste du använda dynamisk sql (utför omedelbart). Du måste dock vara medveten om att DDL-operationer utför implicita commits, så din procedur skulle inte vara en enda atomär transaktion.




  1. Ladda data i fil, skillnad mellan Windows och Linux

  2. Hur kan jag rensa bort dubblettposter i en arkiverad posttabell

  3. PHP + MYSQL på Duplicate KEY ökar fortfarande INDEX KEY

  4. Hur man konverterar en sträng till en tidsstämpel i PostgreSQL