Pytanie Jak utworzyć tabelę tymczasową w bazie danych Oracle?


Chciałbym utworzyć tabelę tymczasową w bazie danych Oracle

coś jak

Declare table @table (int id)

W serwerze SQL

I zapełnij go instrukcją select

Czy to możliwe?

Dzięki


73
2018-04-19 23:09


pochodzenie




Odpowiedzi:


Tak, Oracle ma tabele tymczasowe. Oto link do AskTom artykuł opisujący je i tutaj jest oficjalną dokumentacją CREATE TABLE.

Jednak w Oracle tylko dane w tabeli tymczasowej jest tymczasowy. Tabela jest zwykłym obiektem widocznym dla innych sesji. Złą praktyką jest często tworzenie i usuwanie tabel tymczasowych w Oracle.

CREATE GLOBAL TEMPORARY TABLE today_sales(order_id NUMBER)
ON COMMIT PRESERVE ROWS;

Oracle 18c dodało prywatne tabele tymczasowe, które są obiektami z jedną sesją w pamięci. Widzieć dokumentacja po więcej szczegółów. Prywatne tabele tymczasowe można dynamicznie tworzyć i upuszczać.

CREATE PRIVATE TEMPORARY TABLE ora$ptt_today_sales AS
SELECT * FROM orders WHERE order_date = SYSDATE;

Tabele tymczasowe mogą być przydatne, ale są często nadużywane w Oracle. Często można ich uniknąć, łącząc wiele kroków w pojedynczą instrukcję SQL za pomocą widoków wbudowanych.


109
2018-04-19 23:13



Bez względu na to, ale nigdy nie poleciłbym STWÓRNEGO TABELI JAKO WYBIERAĆ dla globalnego tymczasowego stołu - mniej doświadczony programista może pomylić się, że za każdym razem musi wypełniać GTT w ten sposób. Oczywiście, jest to wygodny sposób kopiowania definicji z innej tabeli, ale ten przykład prawdopodobnie zmyli niektóre osoby. - Jeffrey Kemp
Całkowicie zgadzam się z Jeffreyem Kempem, to tylko jeden ze sposobów tworzenia tego stołu, wpadłem na to i zrozumiałem człowieka, czy muszę umieścić to stwierdzenie w moim DDL. - Vijay Kumar
możesz po prostu dodać "where 1 = 0"; - Palcente
@Palcente, które nadal implikuje, że potrzebujesz "prawdziwego stołu" o tej samej strukturze, aby utworzyć tymczasowy, co nie jest prawdą (zobacz również ta odpowiedź. Poza tym ta odpowiedź pomija fakt, że nie tylko ŚWIATOWY tabela tymczasowa, ale można również użyć "zwykłych" tabel tymczasowych. Różnica w stosunku do SQL Server, as wskazany przez Mateusza, jest kolejnym ważnym punktem, na który należy zwrócić uwagę (lub zastanawiać się nad błędami w "drugim wywołaniu" o obiekcie już istniejącym;) - Izzy


Tylko wskazówka .. Tabele tymczasowe w Oracle różnią się od SQL Server. Tworzysz ją JEDEN i tylko RAZ, nie każdą sesję. Wiersze, które do niego wstawisz, są widoczne tylko dla Twojej sesji i są automatycznie usuwane (tzn. TRUNCATE, nie DROP) po zakończeniu sesji (lub po zakończeniu transakcji, w zależności od tego, którą klauzulę "NA COMMIT" używasz).


65
2018-04-19 23:34



Nie w pełni rozumiem. Powiedziałeś, że tworzysz go raz i tylko raz, a nie każdą sesję. Jednak powiedziałeś również, że tabela tymczasowa jest usuwana podczas każdej sesji. Czy to nie oznacza, że ​​musisz utworzyć tabelę tymczasową w każdej sesji? - Chaos
DELETED, nie DROPped. - Tripp Kinetics
Nie tworzysz tabeli tymczasowej w każdej sesji, ale raz. Tabela jest dostępna w całym systemie. Tabela jest dostępna z każdej sesji, którą tworzysz, w tym sesji równoległych. ale gdy wstawiasz dane z jednej sesji, dane te nie są widoczne z innych równoległych sesji w systemie. Dane jednej sesji są własnością tylko tej sesji. W związku z tym dane są specyficzne dla sesji, niewidoczne w systemie. Dlatego po zamknięciu jednej sesji dane tej sesji są usuwane z tabeli. - SubhasisM


CREATE GLOBAL TEMPORARY TABLE Table_name
    (startdate DATE,
     enddate DATE,
     class CHAR(20))
  ON COMMIT DELETE ROWS;

28
2018-02-01 09:32



Pamiętaj, że wiersze zawsze będą usuwane pod koniec sesji; ON COMMIT DELETE ROWS oznacza, że ​​zostaną one wcześniej odrzucone, jeśli dokonasz inkrementacji podczas sesji.
Czy podczas sesji można ręcznie usuwać wiersze? - zygimantus
zygimantus, tak, możesz usunąć ręcznie podczas sesji. Podczas sesji tabela tymczasowa zachowuje się dokładnie tak, jak normalna tabela. Jedyna różnica między tabelą tymczasową a tabelą rzeczywistą z punktu widzenia użytkownika polega na tym, że wszystkie wiersze są usuwane po zakończeniu sesji i żadna inna sesja nie może odczytać zawartości tabeli używanej przez sesję. Występuje tabela na sesję; dwie sesje mogą korzystać z tej samej tabeli tymczasowej w tym samym czasie i mieć dwa różne zestawy wierszy, bez żadnych konfliktów. - Hans Deragon