CHỌN VÀO bằng cách sử dụng Oracle


134

Tôi đang cố gắng thực hiện CHỌN VÀO bằng cách sử dụng Oracle. Truy vấn của tôi là:

SELECT * INTO new_table FROM old_table;

Nhưng tôi nhận được lỗi sau:

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

Có ý kiến ​​gì sai không?


Hành vi tiêu chuẩn ở trên phải như tôi nghĩ ban đầu: Tuy nhiên, Oracle đã triển khai nó hoàn toàn khác theo phương ngữ SQL Oracle Docs của riêng họ trên Chèn ... Chọn


3
select intođể tạo một bảng mới không phải là một phần của tiêu chuẩn. Các tiêu chuẩn SQL để tạo ra một bảng dựa trên chọn là create table .. as select .... Trong tiêu chuẩn SQL SELECT INTOđược định nghĩa để đọc giá trị cột thành một biến trong ngôn ngữ lập trình
a_horse_with_no_name

Câu trả lời:


282

Nếu NEW_TABLE đã tồn tại thì ...

insert into new_table 
select * from old_table
/

Nếu bạn muốn tạo NEW_TABLE dựa trên các bản ghi trong OLD_TABLE ...

create table new_table as 
select * from old_table
/

Nếu mục đích là để tạo một bảng mới nhưng trống thì hãy sử dụng mệnh đề WHERE với điều kiện không bao giờ có thể đúng:

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

Hãy nhớ rằng TẠO BẢNG ... NHƯ CHỌN chỉ tạo một bảng có cùng hình chiếu với bảng nguồn. Bảng mới không có bất kỳ ràng buộc, kích hoạt hoặc chỉ mục nào mà bảng gốc có thể có. Những người vẫn phải được thêm bằng tay (nếu chúng được yêu cầu).


18
+1 @Robert: Plus, nếu bạn chỉ muốn sao chép lược đồ của old_table, hãy sử dụng mệnh đề where âm, ví dụ: tạo new_table như select * từ old_table WHERE 1 = 2.
KMån

31

select intođược sử dụng trong pl / sql để đặt biến cho các giá trị trường. Thay vào đó, sử dụng

create table new_table as select * from old_table

Tôi mặc dù CHỌN VÀO là một phần của Tiêu chuẩn. Oracle đã làm điều gì đó kỳ lạ ở đây hay nó không bao giờ là một phần của tiêu chuẩn?
Robert Gould

3
select intolà một phần của pl / sql. Nó là một ngôn ngữ để viết các thủ tục được lưu trữ và không có liên quan trực tiếp đến tiêu chuẩn sql. Và vâng, Oracle đã tạo ra nhiều thứ không bao giờ là một phần của tiêu chuẩn =)
Rorick

2
@RobertGould: không, không phảiSELECT INTO là SQL chuẩn. Tiêu chuẩn chỉ xác địnhcreate table .. as select ..
a_horse_with_no_name

CHỌN VÀO LÀ một phần của SQL tiêu chuẩn, xem w3schools.com/sql/sql_select_into.asp Giống như nhiều phần khác của SQL tiêu chuẩn, Oracle tự làm việc của mình.
graham hanson

2
@grahamhanson dường như là một liên kết đến trang web hướng dẫn của W3Schools, không phải là tài liệu tiêu chuẩn ANSI.
William Robertson

3

Sử dụng:

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

Thí dụ:

create table dept
as
select empno, ename from emp;

Nếu bảng đã tồn tại:

insert into new_tablename select columns_list from Existed_table;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.