Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle PL/SQL Tworzysz tabele pod kursorem?

Zwykle nie wykonujesz DDL (tworzenie, zmienianie, usuwanie) wewnątrz procedury PL/SQL. Jeśli potrzebujesz tabeli do przechowywania danych tymczasowych, możesz utworzyć tabele tymczasowe w tym celu. W twoim przypadku najpierw utworzyłbym tabele

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 wtedy procedura wyglądałaby tak

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

DELETE FROM T1;
DELETE FROM T2;
END;
/

Oczywiście tabele nie zostałyby po tym usunięte, ale przypuszczam, że chcesz używać procedury PL/SQL regularnie, a nie tylko raz, prawda?

Jeśli nadal chcesz wykonać DDL w swojej procedurze, musisz użyć dynamiczny sql (wykonaj natychmiast). Musisz jednak pamiętać, że operacje DDL wykonują niejawne zatwierdzenia, więc Twoja procedura nie będzie pojedynczą transakcją atomową.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd podczas wywoływania java z PL/SQL

  2. Czy substr czy LIKE są szybsze w Oracle?

  3. Użycie JPA i 1000 ID w Oracle IN Operator

  4. Tomcat 6/7 JNDI z wieloma źródłami danych

  5. Nadawanie uprawnień użytkownikom na innym schemacie