Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle PL/SQL Erstellen von Tabellen im Cursor?

Normalerweise führen Sie keine DDLs (Erstellen, Ändern, Löschen) innerhalb Ihrer PL/SQL-Prozedur aus. Wenn Sie eine Tabelle zum Speichern temporärer Daten benötigen, können Sie temporäre Tabellen für diesen Zweck. In Ihrem Fall würde ich zuerst die Tabellen erstellen

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;

Und dann würde die Prozedur so aussehen

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

DELETE FROM T1;
DELETE FROM T2;
END;
/

Natürlich würden die Tabellen danach nicht gelöscht, aber ich nehme an, Sie möchten Ihre PL/SQL-Prozedur regelmäßig verwenden, nicht nur einmal, oder?

Wenn Sie dennoch DDL in Ihrem Verfahren ausführen möchten, müssen Sie dynamisches SQL (sofort ausführen). Sie müssen sich jedoch darüber im Klaren sein, dass DDL-Operationen implizite Festschreibungen ausführen, sodass Ihre Prozedur keine einzelne atomare Transaktion wäre.