Saya tahu pernyataannya:
create table xyz_new as select * from xyz;
Yang menyalin struktur dan data, tetapi bagaimana jika saya hanya ingin struktur?
sql
oracle
copy
database-table
Andrew
sumber
sumber
Jawaban:
Cukup gunakan klausa where yang tidak akan memilih baris apa pun:
Keterbatasan
Hal-hal berikut tidak akan disalin ke tabel baru:
Ini juga tidak menangani partisi
sumber
Saya menggunakan metode yang Anda terima banyak, tetapi sebagai seseorang menunjukkan itu tidak menduplikasi kendala (kecuali untuk NOT NULL, saya pikir).
Metode yang lebih maju jika Anda ingin menduplikasi struktur penuh adalah:
Ini akan memberi Anda teks pernyataan buat lengkap yang dapat Anda modifikasi sesuai keinginan untuk membuat tabel baru. Anda harus mengubah nama tabel dan semua kendala tentu saja.
(Anda juga bisa melakukan ini dalam versi yang lebih lama menggunakan EXP / IMP, tetapi sekarang jauh lebih mudah.)
Diedit untuk menambahkan Jika tabel yang Anda cari ada dalam skema yang berbeda:
sumber
My_table_name
adalah tabel yang ada. Tapi bagaimana cara membuat nama tabel baru saya dibuat?new_table = dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME', 'OTHER_SCHEMA_NAME' ).
Sementara itu tolong beri tahu saya apa yang LONG lakukan di sini.Menggunakan pengembang sql pilih tabel dan klik pada tab DDL
Anda bisa menggunakan kode itu untuk membuat tabel baru tanpa data saat Anda menjalankannya di lembar kerja sql
sqldeveloper adalah aplikasi gratis untuk digunakan dari oracle.
Jika tabel memiliki urutan atau pemicu, ddl terkadang akan menghasilkannya untuk Anda juga. Anda hanya harus berhati-hati dalam urutan apa Anda membuatnya dan tahu kapan menyalakan atau mematikan pemicu.
sumber
SQL
Untuk menghindari berulang-ulang dan masukkan apa pun berdasarkan kondisi di mana 1 = 2
sumber
sumber
Anda dapat melakukan ini
Create table New_table as select * from Old_table where 1=2 ;
tetapi hati - hati . Tabel yang Anda buat dosis tidak memiliki Indeks, Pk dan sebagainya seperti old_tablesumber
Buat tabel baru yang kosong menggunakan skema yang lain. Cukup tambahkan klausa WHERE yang menyebabkan kueri tidak mengembalikan data:
sumber
Anda juga bisa melakukan
kemudian potong meja
abc_new
. Semoga ini akan mencukupi kebutuhan Anda.sumber
Cukup tulis permintaan seperti:
di mana
new_table
nama tabel baru yang ingin Anda buat danold_table
adalah nama tabel yang ada yang strukturnya ingin Anda salin, ini hanya akan menyalin struktur.sumber
WHERE 1 = 0
atau kondisi palsu yang serupa berhasil, tetapi saya tidak suka tampilannya. Kode yang sedikit lebih bersih untuk Oracle 12c + IMHO adalahCREATE TABLE bar AS SELECT * FROM foo FETCH FIRST 0 ROWS ONLY;
Batasan yang sama berlaku: hanya definisi kolom dan nullability yang disalin ke tabel baru.
sumber
Dengan cara lain Anda bisa mendapatkan ddl pembuatan tabel dari perintah yang tercantum di bawah ini, dan jalankan pembuatannya.
TYPE
adalahTABLE
,PROCEDURE
dll.Dengan perintah ini, Anda bisa mendapatkan mayoritas ddl dari objek basis data.
sumber
GET_DDL
peka terhadap huruf besar-kecil.Source_table adalah tabel yang ingin Anda salin strukturnya.
sumber
Menggunakan pengembang pl / sql Anda dapat mengklik kanan pada table_name baik di ruang kerja sql atau di objek explorer, daripada klik pada "view" dan kemudian klik "view sql" yang menghasilkan skrip sql untuk membuat tabel bersama dengan semua kendala , indeks, partisi dll.
Selanjutnya Anda menjalankan skrip menggunakan new_table_name
sumber
salin tanpa data tabel
salin dengan data tabel
sumber
- Ini akan membuat tabel dan menyalin semua data.
- Ini akan memiliki struktur tabel yang sama tetapi semua data yang disalin akan dihapus.
Jika Anda ingin mengatasi keterbatasan yang ditentukan oleh jawaban: Bagaimana saya bisa membuat salinan tabel Oracle tanpa menyalin data?
sumber
Tugas di atas dapat diselesaikan dalam dua langkah sederhana.
LANGKAH 1:
Itu
query
atas membuat duplikat tabel (dengan konten juga).Untuk mendapatkan struktur, hapus isi tabel menggunakan.
LANGKAH 2:
Semoga ini bisa menyelesaikan masalah Anda. Dan terima kasih untuk posting sebelumnya. Memberiku banyak wawasan.
sumber
truncate
versi. Selain mengalokasikan luasan untuk semua data, Anda tidak membebaskannya dengan menghapus, jadi Anda berpotensi menyia-nyiakan ruang kecuali tabel tumbuh ke ukuran lama. Dan Anda menghasilkan undo / redo pada kedua sisipan dan hapus. Jawaban Jim dengan sangat sederhana menghindari semua itu.