2010-02-12 2 views
104

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

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" 

Bất kỳ ý tưởng gì sai?


Hành vi tiêu chuẩn của trên nên được như tôi nghĩ ban đầu: Tuy nhiên Oracle thực hiện nó hoàn toàn khác nhau trong phương ngữ riêng của họ về SQL Oracle Docs on Insert ... Select

+2

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

Trả lời

222

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

insert into new_table select * from old_table 
/

Nếu bạn muốn tạo NEW_TABLE dựa trên các hồ sơ trong OLD_TABLE ...

create table new_table as select * from old_table 
/
+13

+1 @Robert: Thêm vào đó, nếu bạn chỉ muốn sao chép giản đồ của old_table, hãy sử dụng mệnh đề negative where, ví dụ: create new_table như select * from old_table WHERE 1 = 2. –

26

select into được sử dụng trong pl/sql để thiết lập mộ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 
+0

Tôi mặc dù SELECT INTO 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? –

+3

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

+0

@RobertGould: no, 'SELECT INTO' là * không * chuẩn SQL. Tiêu chuẩn chỉ định nghĩa 'tạo bảng .. khi chọn ..' –

2

Sử dụng:

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

Ví 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;