sql >> Databáze >  >> RDS >> Oracle

Oracle PL/SQL Vytváření tabulek v kurzoru?

Obvykle neprovádíte DDL (create, alter, drop) uvnitř vaší PL/SQL procedury. Pokud potřebujete tabulku pro uložení některých dočasných dat, můžete vytvořit dočasné tabulky pro tento účel. Ve vašem případě bych nejprve vytvořil tabulky

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;

A pak by postup vypadal takto

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

DELETE FROM T1;
DELETE FROM T2;
END;
/

Tabulky by poté samozřejmě nebyly odstraněny, ale předpokládám, že chcete svou proceduru PL/SQL používat pravidelně, nejen jednou, že?

Pokud přesto chcete ve svém postupu provést DDL, musíte použít dynamické sql (provést okamžitě). Musíte si však být vědomi toho, že operace DDL provádějí implicitní potvrzení, takže vaše procedura nebude jedinou atomickou transakcí.




  1. Vložit do postgres SQL

  2. Existuje na serveru SQL nějaká funkce lineární regrese?

  3. Použijte výsledky z jednoho dotazu SQL v jiném příkazu where (poddotaz?)

  4. počet mysql pouze pro odlišné hodnoty ve spojeném dotazu