Znam oświadczenie:
create table xyz_new as select * from xyz;
Które kopiują strukturę i dane, ale co jeśli chcę tylko strukturę?
sql
oracle
copy
database-table
Andrzej
źródło
źródło
Odpowiedzi:
Wystarczy użyć klauzuli where, która nie wybierze żadnych wierszy:
Ograniczenia
Następujące rzeczy nie zostaną skopiowane do nowej tabeli:
To również nie obsługuje partycji
źródło
Użyłem metody, którą dużo zaakceptowałeś, ale jak ktoś zauważył, nie powiela ona ograniczeń (chyba, że NOT NOT NULL).
Bardziej zaawansowaną metodą, jeśli chcesz powielić pełną strukturę, jest:
To da ci pełny tekst instrukcji tworzenia, którą możesz modyfikować, kiedy chcesz utworzyć nową tabelę. Będziesz musiał zmienić nazwy tabeli i wszystkie ograniczenia oczywiście.
(Możesz to również zrobić w starszych wersjach przy użyciu EXP / IMP, ale teraz jest to o wiele łatwiejsze.)
Edytowano, aby dodać Jeśli poszukiwana tabela jest w innym schemacie:
źródło
My_table_name
to istniejąca tabela. Ale jak mogę utworzyć nazwę mojego nowego stołu?new_table = dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME', 'OTHER_SCHEMA_NAME' ).
Tymczasem proszę daj mi znać, co LONG tutaj robi.Za pomocą programisty sql wybierz tabelę i kliknij kartę DDL
Możesz użyć tego kodu, aby utworzyć nową tabelę bez danych po uruchomieniu go w arkuszu SQL
sqldeveloper to darmowa aplikacja z Oracle.
Jeśli tabela ma sekwencje lub wyzwalacze, ddl czasami generuje je również dla Ciebie. Musisz tylko uważać, w jakiej kolejności je robisz i wiedzieć, kiedy włączyć lub wyłączyć wyzwalacze.
źródło
SQL
Aby uniknąć iteracji raz po raz i nic nie wstawiać w oparciu o warunek, w którym 1 = 2
źródło
źródło
Możesz to zrobić,
Create table New_table as select * from Old_table where 1=2 ;
ale bądź ostrożny . Tabela, którą tworzysz, nie ma żadnego indeksu, Pk i tak dalej, jak old_tableźródło
Utwórz nową pustą tabelę, korzystając ze schematu innej. Wystarczy dodać klauzulę WHERE, która powoduje, że zapytanie nie zwraca danych:
źródło
możesz także zrobić
następnie obetnij stół
abc_new
. Mam nadzieję, że to wystarczy.źródło
Po prostu napisz zapytanie takie jak:
gdzie
new_table
jest nazwa nowej tabeli, którą chcesz utworzyć, iold_table
nazwa istniejącej tabeli, której strukturę chcesz skopiować, spowoduje to skopiowanie tylko struktury.źródło
WHERE 1 = 0
lub podobne fałszywe warunki działają, ale nie podoba mi się ich wygląd. Marginalnie czystszy kod dla Oracle 12c + IMHO toCREATE TABLE bar AS SELECT * FROM foo FETCH FIRST 0 ROWS ONLY;
Obowiązują te same ograniczenia: tylko definicje kolumn i ich dopuszczalność zerowania są kopiowane do nowej tabeli.
źródło
W inny sposób można uzyskać ddl tworzenia tabeli z polecenia wymienionego poniżej i wykonać tworzenie.
TYPE
jestTABLE
,PROCEDURE
itd.Za pomocą tego polecenia można uzyskać większość ddl z obiektów bazy danych.
źródło
GET_DDL
rozróżniana jest wielkość liter.Tabela_źródł jest tabelą, którą chcesz skopiować.
źródło
Za pomocą programisty pl / sql możesz kliknąć prawym przyciskiem myszy nazwę_tabeli w obszarze roboczym sql lub w eksploratorze obiektów, a następnie kliknąć „widok”, a następnie „widok sql”, który generuje skrypt sql, aby utworzyć tabelę wraz ze wszystkimi ograniczeniami , indeksy, partycje itp.
Następnie uruchom skrypt, używając nowej_tabeli_nazwy
źródło
kopiuj bez danych tabeli
kopiuj z danymi tabeli
źródło
- Spowoduje to utworzenie tabeli i skopiowanie wszystkich danych.
- Będzie miał tę samą strukturę tabeli, ale wszystkie skopiowane dane zostaną usunięte.
Jeśli chcesz przezwyciężyć ograniczenia określone w odpowiedzi: Jak mogę utworzyć kopię tabeli Oracle bez kopiowania danych?
źródło
Powyższe zadanie można wykonać w dwóch prostych krokach.
KROK 1:
The
query
Powyżej tworzy duplikat tabeli (z treści, jak również).Aby uzyskać strukturę, usuń zawartość tabeli za pomocą.
KROK 2:
Mam nadzieję, że to rozwiąże twój problem. I dzięki wcześniejszym postom. Dał mi wiele wglądu.
źródło
truncate
wersja. Oprócz przydziału zakresów dla wszystkich danych, nie zwalniasz ich przez usunięcie, więc potencjalnie marnujesz miejsce, chyba że tabela powiększy się do starego rozmiaru. I generujesz cofanie / ponawianie zarówno dla wstawiania, jak i usuwania. Odpowiedź Jima po prostu unika tego wszystkiego.