Biasanya Anda tidak melakukan DDL (buat, ubah, jatuhkan) di dalam prosedur PL/SQL Anda. Jika Anda memerlukan tabel untuk menyimpan beberapa data sementara, Anda dapat membuat tabel sementara untuk tujuan ini. Dalam kasus Anda, pertama-tama saya akan membuat tabel
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;
Dan kemudian prosedurnya akan terlihat seperti ini
DECLARE
CURSOR CUR IS ...
BEGIN
FOR rec IN CUR
LOOP
--Do stuff here
END LOOP;
DELETE FROM T1;
DELETE FROM T2;
END;
/
Tentu saja tabel tidak akan dihapus setelah itu, tetapi saya kira Anda ingin menggunakan prosedur PL/SQL Anda secara teratur, tidak hanya sekali, bukan?
Jika Anda masih ingin melakukan DDL dalam prosedur Anda, maka Anda harus menggunakan sql dinamis (langsung eksekusi). Namun Anda harus menyadari bahwa operasi DDL melakukan komitmen implisit, sehingga prosedur Anda tidak akan menjadi transaksi atom tunggal.