sql >> Database >  >> RDS >> Oracle

Oracle PL/SQL Tabellen maken in cursor?

Gewoonlijk voert u geen DDL's (creëren, wijzigen, neerzetten) uit binnen uw PL/SQL-procedure. Als je een tabel nodig hebt om tijdelijke gegevens op te slaan, kun je tijdelijke tabellen Voor dit doeleinde. In jouw geval zou ik eerst de tabellen maken

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;

En dan ziet de procedure er zo uit

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

DELETE FROM T1;
DELETE FROM T2;
END;
/

Natuurlijk zouden de tabellen daarna niet meer worden verwijderd, maar ik neem aan dat u uw PL/SQL-procedure regelmatig wilt gebruiken, niet slechts één keer, toch?

Als u nog steeds DDL in uw procedure wilt toepassen, moet u dynamische sql (direct uitvoeren). U moet zich er echter van bewust zijn dat DDL-bewerkingen impliciete commits uitvoeren, dus uw procedure zou geen enkele atomaire transactie zijn.




  1. PHP - haal gegevens van db naar JSON

  2. Oracle:Java-opgeslagen procedure die JMS-bericht verzendt

  3. Database-uitzondering - Algemene fout:1021 Schijf vol

  4. Een berichtensysteem in DB maken (vooral MySQL)