使用Oracle选择进入


134

我正在尝试使用Oracle进行SELECT INTO。我的查询是:

SELECT * INTO new_table FROM old_table;

但我收到以下错误:

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

有什么想法吗?


上面的标准行为应该是我最初的想法:但是Oracle在自己的SQL方言中对Oracle的实现完全不同


3
select into创建新表不是该标准的一部分。用于基于选择创建表的SQL标准是create table .. as select ...。在SQL标准SELECT INTO中,定义为以编程语言将列值读取到变量中
a_horse_with_no_name 2012年

Answers:


282

如果NEW_TABLE已经存在,则...

insert into new_table 
select * from old_table
/

如果要基于OLD_TABLE中的记录创建NEW_TABLE ...

create table new_table as 
select * from old_table
/

如果目的是创建一个新的但空的表,则使用WHERE子句,其条件永远不能为真:

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

请记住,CREATE TABLE ... AS SELECT仅创建一个与源表具有相同投影的表。新表没有原始表可能具有的任何约束,触发器或索引。那些仍然必须手动添加(如果需要)。


18
+1 @Robert:另外,如果您只想复制old_table的架构,请使用否定的where子句,例如:创建new_table作为select * from old_table WHERE 1 = 2。
KMån

31

select into在pl / sql中用于将变量设置为字段值。相反,使用

create table new_table as select * from old_table

尽管SELECT INTO是标准的一部分。Oracle在这里做了什么奇怪的事情,还是它从未成为标准的一部分?
罗伯特·古尔德

3
select into是pl / sql的一部分。它是用于编写存储过程的语言,与sql标准没有直接关系。是的,Oracle做了很多事情,这些事情从来都不是标准=)
Rorick 2010年

2
@RobertGould:没有,SELECT INTO 不是标准的SQL。该标准仅定义create table .. as select ..
a_horse_with_no_name 2013年

SELECT INTO是标准SQL的一部分,请参见w3schools.com/sql/sql_select_into.asp。 与标准SQL的许多其他部分一样,Oracle也会做自己的事情。
格雷厄姆·汉森

2
@grahamhanson似乎是W3Schools教程网站的链接,而不是ANSI标准文档。
威廉·罗伯逊

3

用:

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

例:

create table dept
as
select empno, ename from emp;

如果表已经存在:

insert into new_tablename select columns_list from Existed_table;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.