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
źródło
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
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średnioSELECT
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
NieDROP
) po zakończeniu sesji (lub zakończeniu transakcji, w zależności od używanej klauzuli „ON COMMIT”).źródło
DELETED
, nieDROP
ped.CREATE GLOBAL TEMPORARY TABLE Table_name (startdate DATE, enddate DATE, class CHAR(20)) ON COMMIT DELETE ROWS;
źródło
ON COMMIT DELETE ROWS
oznacza, że zostaną odrzucone wcześniej, jeśli będziesz zatwierdzać stopniowo podczas sesji.UTWÓRZ TABELĘ table_temp_list_objects AS
SELECT o.owner, o.object_name FROM sys.all_objects o WHERE o.object_type = 'TABLE';
źródło