Saya ingin membuat tabel sementara dalam database Oracle
sesuatu seperti
Declare table @table (int id)
Di server SQL
Dan kemudian mengisinya dengan pernyataan pilih
Apa itu mungkin?
Terima kasih
sumber
Saya ingin membuat tabel sementara dalam database Oracle
sesuatu seperti
Declare table @table (int id)
Di server SQL
Dan kemudian mengisinya dengan pernyataan pilih
Apa itu mungkin?
Terima kasih
Ya, Oracle memiliki tabel sementara. Berikut ini adalah link ke AskTom artikel yang menjelaskan mereka dan di sini adalah oracle resmi MENCIPTAKAN dokumentasi TABLE.
Namun, di Oracle, hanya data di tabel sementara yang bersifat sementara. Tabel adalah objek biasa yang terlihat pada sesi lain. Merupakan praktik yang buruk untuk sering membuat dan menjatuhkan tabel sementara di Oracle.
CREATE GLOBAL TEMPORARY TABLE today_sales(order_id NUMBER)
ON COMMIT PRESERVE ROWS;
Oracle 18c menambahkan tabel sementara pribadi, yang merupakan objek dalam memori sesi tunggal. Lihat dokumentasi untuk lebih jelasnya. Tabel sementara pribadi dapat dibuat dan dibuang secara dinamis.
CREATE PRIVATE TEMPORARY TABLE ora$ptt_today_sales AS
SELECT * FROM orders WHERE order_date = SYSDATE;
Tabel sementara dapat berguna tetapi biasanya disalahgunakan di Oracle. Mereka sering dapat dihindari dengan menggabungkan beberapa langkah menjadi satu pernyataan SQL menggunakan tampilan sebaris.
CREATE TABLE AS SELECT
: pilih dari tabel jarak jauh dengan kolom LOB, karena Anda tidak dapat langsungSELECT
dari tabel tersebut . Saya sedang menulis prosedur untuk menyalin catatan dari database jarak jauh, dan inilah solusi saya: bawa catatan ke dalam GTT, dan kemudian salin dari situ ke tabel "nyata".Sekadar tip .. Tabel sementara di Oracle berbeda dengan SQL Server. Anda membuatnya SEKALI dan hanya SEKALI, tidak setiap sesi. Baris yang Anda masukkan ke dalamnya hanya terlihat untuk sesi Anda, dan secara otomatis dihapus (yaitu,
TRUNCATE
tidakDROP
) ketika Anda mengakhiri sesi Anda (atau akhir transaksi, tergantung pada klausa "ON COMMIT" yang Anda gunakan).sumber
DELETED
, bukanDROP
ped.CREATE GLOBAL TEMPORARY TABLE Table_name (startdate DATE, enddate DATE, class CHAR(20)) ON COMMIT DELETE ROWS;
sumber
ON COMMIT DELETE ROWS
berarti mereka akan dibuang lebih cepat, jika Anda berkomitmen secara bertahap selama sesi.BUAT TABEL table_temp_list_objects AS
PILIH o.owner, o.object_name DARI sys.all_objects o WHERE o.object_type = 'TABLE';
sumber