Chciałbym utworzyć tymczasową tabelę w bazie danych Oracle
coś jak
Declare table @table (int id)
Na serwerze SQL
A następnie wypełnij go instrukcją Select
Czy to możliwe?
Dzięki
Odpowiedzi:
Tak, Oracle ma tymczasowe tabele. Tutaj jest link do artykułu AskTom opisującego je, a tutaj jest oficjalna dokumentacja Oracle CREATE TABLE.
Jednak w Oracle tylko dane w tabeli tymczasowej są tymczasowe. Tabela jest zwykłym obiektem widocznym dla innych sesji. Częste tworzenie i usuwanie tabel tymczasowych w Oracle jest złą praktyką.
CREATE GLOBAL TEMPORARY TABLE today_sales(order_id NUMBER)
ON COMMIT PRESERVE ROWS;
Oracle 18c dodał prywatne tabele tymczasowe, które są obiektami w pamięci pojedynczej sesji. Więcej informacji można znaleźć w dokumentacji . Prywatne tabele tymczasowe można dynamicznie tworzyć i usuwać.
CREATE PRIVATE TEMPORARY TABLE ora$ptt_today_sales AS
SELECT * FROM orders WHERE order_date = SYSDATE;
Tabele tymczasowe mogą być przydatne, ale w Oracle są często nadużywane. Często można ich uniknąć, łącząc wiele kroków w jedną instrukcję SQL przy użyciu widoków wbudowanych.
CREATE TABLE AS SELECT
: wybierz ze zdalnych tabel z kolumnami LOB, ponieważ nie możesz bezpośrednio SELECT
z nich. Piszę procedurę kopiowania rekordów ze zdalnej bazy danych i to było moje rozwiązanie: przenieś rekordy do GTT, a następnie skopiuj z tego do „prawdziwej” tabeli.
Wskazówka… Tymczasowe tabele w Oracle różnią się od SQL Server. Tworzysz ją RAZ i TYLKO RAZ, nie w każdej sesji. Wiersze, które w nim wstawisz, są widoczne tylko dla Twojej sesji i są automatycznie usuwane (tj. TRUNCATE
Nie DROP
) po zakończeniu sesji (lub zakończeniu transakcji, w zależności od używanej klauzuli „ON COMMIT”).
DELETED
, nie DROP
ped.
CREATE GLOBAL TEMPORARY TABLE Table_name
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT DELETE ROWS;
ON COMMIT DELETE ROWS
oznacza, że zostaną odrzucone wcześniej, jeśli będziesz zatwierdzać stopniowo podczas sesji.