Oracle veritabanında geçici bir tablo oluşturmak istiyorum
gibi bir şey
Declare table @table (int id)
SQL sunucusunda
Ve sonra bunu bir select deyimiyle doldurun
Mümkün mü?
Teşekkürler
Yanıtlar:
Evet, Oracle'da geçici tablolar var. İşte bunları açıklayan bir AskTom makalesine bağlantı ve işte oracle CREATE TABLE belgeleri.
Ancak Oracle'da yalnızca geçici tablodaki veriler geçicidir. Tablo, diğer oturumlar tarafından görülebilen normal bir nesnedir. Oracle'da sık sık geçici tablolar oluşturmak ve bırakmak kötü bir uygulamadır.
CREATE GLOBAL TEMPORARY TABLE today_sales(order_id NUMBER)
ON COMMIT PRESERVE ROWS;
Oracle 18c, tek oturumluk bellek içi nesneler olan özel geçici tablolar ekledi. Daha fazla ayrıntı için belgelere bakın. Özel geçici tablolar dinamik olarak oluşturulabilir ve çıkarılabilir.
CREATE PRIVATE TEMPORARY TABLE ora$ptt_today_sales AS
SELECT * FROM orders WHERE order_date = SYSDATE;
Geçici tablolar yararlı olabilir ancak genellikle Oracle'da kötüye kullanılırlar. Satır içi görünümler kullanılarak birden çok adımı tek bir SQL deyiminde birleştirerek genellikle bunlardan kaçınılabilir.
CREATE TABLE AS SELECT
: Doğrudan SELECT
onlardan yapamayacağınız için LOB sütunları olan uzak tablolardan seçim yapın . Uzak bir veritabanından kayıtları kopyalamak için bir prosedür yazıyorum ve bu benim çözümümdü: kayıtları bir GTT'ye getirin ve ondan "gerçek" tabloya kopyalayın.
Sadece bir ipucu .. Oracle'daki geçici tablolar SQL Server'dan farklıdır. Her oturumda değil, BİR KEZ ve sadece BİR KEZ yaratırsınız. İçine eklediğiniz satırlar yalnızca oturumunuz tarafından görülebilir ve oturumunuzu bitirdiğinizde (veya kullandığınız "ON COMMIT" maddesine bağlı olarak işlemin sonunda) otomatik olarak silinir (yani TRUNCATE
, değil DROP
).
DELETED
, DROP
ped değil .
CREATE GLOBAL TEMPORARY TABLE Table_name
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT DELETE ROWS;
ON COMMIT DELETE ROWS
oturum sırasında aşamalı olarak taahhütte bulunursanız, daha erken atılacakları anlamına gelir.