SELECT INTO menggunakan Oracle

134

Saya mencoba melakukan SELECT INTO menggunakan Oracle. Kueri saya adalah:

SELECT * INTO new_table FROM old_table;

Tapi saya mendapatkan kesalahan berikut:

SQL Error: ORA-00905: missing keyword
00905. 00000 -  "missing keyword"

Ada ide apa yang salah?


Perilaku standar di atas seharusnya seperti yang saya pikirkan: Namun Oracle menerapkannya dengan cara yang berbeda dalam dialek SQL Oracle Docs mereka pada Insert ... Pilih

Robert Gould
sumber
3
select intountuk membuat tabel baru bukan bagian dari standar. Standar SQL untuk membuat tabel berdasarkan pilihan adalah create table .. as select .... Dalam standar SQL SELECT INTOdidefinisikan untuk membaca nilai kolom menjadi variabel dalam bahasa pemrograman
a_horse_with_no_name

Jawaban:

282

Jika NEW_TABLE sudah ada, maka ...

insert into new_table 
select * from old_table
/

Jika Anda ingin membuat NEW_TABLE berdasarkan catatan di OLD_TABLE ...

create table new_table as 
select * from old_table
/

Jika tujuannya adalah untuk membuat tabel baru tapi kosong maka gunakan klausa WHERE dengan kondisi yang tidak pernah benar:

create table new_table as 
select * from old_table
where 1 = 2
/

Ingat bahwa CREATE TABLE ... AS SELECT hanya membuat tabel dengan proyeksi yang sama dengan tabel sumber. Tabel baru tidak memiliki kendala, pemicu atau indeks yang mungkin dimiliki oleh tabel asli. Itu masih harus ditambahkan secara manual (jika diperlukan).

APC
sumber
18
+1 @Robert: Plus, jika Anda hanya ingin menyalin skema old_table, gunakan klausa negatif tempat, seperti misalnya: buat new_table sebagai select * from old_table WHERE 1 = 2.
KMån
31

select intodigunakan dalam pl / sql untuk mengatur variabel ke nilai bidang. Sebaliknya, gunakan

create table new_table as select * from old_table
wallyk
sumber
Saya pikir SELECT INTO adalah bagian dari Standar. Apakah Oracle melakukan sesuatu yang aneh di sini atau tidak pernah menjadi bagian dari standar?
Robert Gould
3
select intoadalah bagian dari pl / sql. Ini adalah bahasa untuk menulis prosedur tersimpan dan tidak memiliki hubungan langsung dengan standar sql. Dan ya, Oracle membuat banyak hal yang tidak pernah menjadi bagian dari standar =)
Rorick
2
@RobertGould: tidak ada, SELECT INTO adalah tidak standar SQL. Standar ini hanya mendefinisikancreate table .. as select ..
a_horse_with_no_name
SELECT INTO IS bagian dari SQL standar, lihat w3schools.com/sql/sql_select_into.asp Seperti banyak bagian lain dari SQL standar Oracle melakukan hal sendiri.
graham hanson
2
@ grahamhanson yang tampaknya menjadi tautan ke situs tutorial W3Schools, bukan dokumen standar ANSI.
William Robertson
3

Menggunakan:

create table new_table_name 
as
select column_name,[more columns] from Existed_table;

Contoh:

create table dept
as
select empno, ename from emp;

Jika tabel sudah ada:

insert into new_tablename select columns_list from Existed_table;
PRADEEP R
sumber